1. 程式人生 > >rest_framework--RESTful規範

rest_framework--RESTful規範

#####RESTful規範#####

一、什麼是restful
    restful其實就是一種軟體架構風格,跟技術毫無關係。是一種面向資源程式設計的方法。
    說起面向資源程式設計,我想起了之前瞭解到的面向過程程式設計,面向物件程式設計

二、restful的10種規範(直接copy了)
    (1)、API與使用者的通訊協議,總是使用HTTPs協議。
    (2)、域名
        https://api.example.com       儘量將API部署在專用域名(會存在跨域問題)
        https://example.org/api/      API很簡單
    (
3)、版本 URL,如:https://api.example.com/v1/ 請求頭 跨域時,引發傳送多次請求 (4)、路徑,視網路上任何東西都是資源,均使用名詞表示(可複數) https://api.example.com/v1/zoos https://api.example.com/v1/animals https://api.example.com/v1/employees (5)、method GET :從伺服器取出資源(一項或多項) POST :在伺服器新建一個資源 PUT :在伺服器更新資源(客戶端提供改變後的完整資源) PATCH :在伺服器更新資源(客戶端提供改變的屬性) DELETE :從伺服器刪除資源 (
6)、過濾,通過在url上傳參的形式傳遞搜尋條件 https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量 https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置 https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數 https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序 https:
//api.example.com/v1/zoos?animal_type_id=1:指定篩選條件 (7)、返回資料必須帶上狀態碼,也可以是自己寫的狀態碼 (8)、錯誤處理,應返回錯誤資訊,error當做key。{'error':錯誤資訊} (9)、返回結果,針對不同操作,伺服器向用戶返回的結果應該符合以下規範。 GET /collection:返回資源物件的列表(陣列) GET /collection/resource:返回單個資源物件 POST /collection:返回新生成的資源物件 PUT /collection/resource:返回完整的資源物件 PATCH /collection/resource:返回完整的資源物件 DELETE /collection/resource:返回一個空文件 (10)、Hypermedia API,RESTful API最好做到Hypermedia,即返回結果中提供連結,連向其他API方法, 使得使用者不查文件,也知道下一步應該做什麼。 {"link": { "rel": "collection https://www.example.com/zoos", "href": "https://api.example.com/zoos", "title": "List of zoos", "type": "application/vnd.yourformat+json" }} 三、怎麼基於django寫restful規範程式碼呢(用CBV) 路由層程式碼: url(r'login/',views.Login.as_views()) 檢視層程式碼: from django.views import View class Login(View): def post(self,request,*args,**kwargs): response = {'status':100,'msg':None} name = request.POST.get('name') password = request.POST.get('password') if name == '朱宇' and password == '123': response['msg'] = '登陸成功' else: response['msg'] = '登陸失敗' response['status'] = 101 return JsonResponse(response) 又想起點東西寫寫吧, 1、這裡request.POST.get('name') ---> 取的是name這個key對應value的最後一個值 2、JsonResponse(response) ---> 假如response光只是字典可以這樣寫,但是有列表的話,必須把safe=False,預設為True 3、再看路由層層程式碼,as_view(),這裡是加了括號的,所以在django程式啟動時,就會執行,它是類的方法,執行結果時返回了一個 view函式的記憶體地址,等路由來的時候,便會加括號執行view函式,view函式的返回值是dispatch(self, request, *args, **kwargs) 的返回值。所以會執行dispatch方法 下面是View類中的dispatch方法原始碼: def dispatch(self, request, *args, **kwargs): if request.method.lower() in self.http_method_names: handler = getattr(self, request.method.lower(), self.http_method_not_allowed) else: handler = self.http_method_not_allowed return handler(request, *args, **kwargs) 我們可以從request物件中知道本次請求的請求方法,如果在http_method_names這個列表裡的話,通過反射獲得該請求方法(小寫)命名 方法的記憶體地址,並去執行,執行完畢return回去