簡體   English   中英

使用django rest框架的api設計概念

[英]api design concept using django rest framework

我的問題或說我的困惑是

API設計是否取決於我們在UI中的呈現方式?

我將用一個示例來說明我的困惑。 如果我希望表單分多個步驟,api的設計會有所不同嗎? 我的意思是在https://www.franchisebazar.com/franchisor-registration中,如果您看到公司注冊表格,則有與公司模型相關的部分,例如公司信息,公司品牌和商業模型。 提交按鈕僅是一個,這意味着將只有一個用於發布公司數據的api。

但是,如果我希望用戶界面在第一步中像公司信息一樣不同(多步向導形式而不是一個單一的大形式),並且在提交公司個人信息之后,下一步將是品牌,然后是業務模型。 為此,我需要單獨設計一個api嗎? 一種用於公司的個人信息,一種用於品牌,一種用於商業模式。

到現在為止我的設計

https://gist.github.com/MilanRgm/132eb6c0ba0cf66e48fa0ca4c17ef732

我會在清單中再簡要介紹一下

1)使用一種大型表格注冊公司資料的API設計

2)使用多步方式注冊公司資料的API設計

我很困惑。 社區提供的任何幫助都將受到高度贊賞。

這也是我想出的代碼

models.py

class Company(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=150, blank=False, null=False)
    phone_number = models.CharField(max_length=15, blank=False, null=False)


class Brand(models.Model):

    company = models.ForeignKey(Company, related_name='company_brand', on_delete=models.CASCADE)
    name = models.CharField(max_length=150, blank=False, null=False)
    website = models.URLField()
    description = models.TextField(blank=False)


class BusinessModel(models.Model):


    company = models.ForeignKey(Company, related_name='company_business_model', on_delete=models.CASCADE)
    industry = models.ForeignKey(Industry, null=True, related_name='industry', on_delete=models.SET_NULL)
    segments = models.ForeignKey(Segment, on_delete=models.SET_NULL, null=True)
    total_investment = models.CharField(max_length=50, choices=TOTAL_INVESTMENT, default=None)

    def __str__(self):
        return self.company.name

serializers.py

class BrandSerializer(serializers.ModelSerializer):

    class Meta:

        model = Brand
        fields = '__all__'



class BusinessModelSerializer(serializers.ModelSerializer):

    class Meta:

        model = BusinessModel
        fields = '__all__'




class CompanySerializer(serializers.ModelSerializer):

    company_brand = BrandSerializer(many=True)
    company_business_model = BusinessModelSerializer(many=True)

    class Meta:

        model = Company
        fields = '__all__'

views.py

class CompanyView(views.APIView):

    serializer_class = CompanySerializer

    def get(self, request, pk=None, format=None):
        reply = {}
        try:
            companies = Company.objects.all()
            if pk:
                company = companies.get(pk=pk)
                reply['data'] = self.serializer_class(company).data
            reply['data'] = self.serializer_class(companies, many=True).data
        except Company.DoesNotExist:
            reply['data'] = []
        return Response(reply, status.HTTP_200_OK)


    def post(self, request, pk=None, format=None):
        reply = {}
        company={}
        if pk is not None:
            try:
                company = Company.object.get(pk=pk)
            except Company.DoesNotExist:
                return error.RequestedResourceNotFound().as_response()
        serialized_data = self.serializer_class(instance=company, data=request.data, partial=True)
        if serialized_data.is_valid():
            serialized_data.save(owner=request.user)
        else:
            return error.ValidationError(serialized_data.errors).as_response()
        reply['data'] = serialized_data.data
        return Response(reply, status.HTTP_200_OK)

API的設計取決於業務案例。 有時,它也取決於GUI。 在您的情況下,最好設計一個API。 但是在前端,您可以根據需要進行設計。 您可以設計多步驟表單,將其保存在Javascript對象中,在過程結束時,您可以將此多步表單數據發布到API。 或者,您可以僅以較大的形式進行設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM