iT邦幫忙

0

自我筆記 - django 系列 [API風格篇]

django API 編寫

以目前流行的restfull API來說,django提供了一些便捷的處理方式讓我們使用。

但是在實作方面時常需要拿A又拿B,改A在刪B,使用了此種風格的API後,
在靈活性上就缺失了一些,但本篇不討論此內容,小弟實作了一些時間,也找尋了很多方法,還是認為沒有哪個風格最完美,還是依照各自需求來決定。

風格是人訂的,寫法是好壞,各位同事間協調好就好 !!

基於函數的寫法

此種方法會讓接口雜亂,不易維護

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('getQuestionAPI', views.getQuestionAPI, name = 'getQuestionAPI'),
    path('postQuestionAPI', views.postQuestionAPI, name = 'postQuestionAPI')
]

# views.py
def getQuestionAPI(request):
    # 取得資料
    pass

def postQuestionAPI(request):
    # 新增資料
    pass

根據 restfull api 風格 改寫函數

這樣寫的好處為接口乾淨簡潔,並且根據http方法請求來判斷 增、修、改、查等等動作

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('QuestionAPI', views.QuestionAPI, name = 'QuestionAPI')
]

# views.py
def QuestionAPI(request):

    httpMethod = request.method

    if httpMethod == 'GET':
        return HttpResponse('取得資料')

    else if httpMethod == 'POST':
        return HttpResponse('新增資料')

django - 基於類的寫法

django 提供了一個更簡潔的寫法 詳細可參考官方文檔

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 這裡在 QuestionAPI後面加上.as_view()
    path('QuestionAPI', views.QuestionAPI.as_view(), name = 'QuestionAPI'),
]

# views.py
class QuestionAPI(View):

    def get(self, request):
        return HttpResponse('請求資料')

    def post(self, request):
        return HttpResponse('新增資料')

官方上還有很多基於類的視圖,有興趣能夠在更深入研究,會讓實作起來更快速方便。


尚未有邦友留言

立即登入留言