CHENGDU3-Restful API 接口規範、django-rest-framework框架

 

Restful API 接口規範、django-rest-framework框架

問題:什麼是API?

答:API是接口,提供url.
接口有兩個用途:
爲別人提供服務,先後端分離。

爲何使用先後端分離?

答:主要爲了數據的解耦,提升開發效率。
若是更新了數據,web頁面須要更改,並且網站的前端頁面變更很大,後端也可能更改,會很是麻煩。
使用前端框架VUE.js,能快速搭建前端項目,不須要依賴後端。
後端只需作序列化,返回json數據便可,並不涉及更多操做。

Restful API規範?

 

答:以前咱們是沒有用rest api規範的,都是經過django的url本身來作的,後來咱們選擇用了rest api。
(1):API與用戶的通訊協議,使用的是http協議
(2):域名儘可能部署在專有域名之下,若API很簡單,不會進一步擴展,能夠考慮放在主域名下。
(3):應將api的版本號放入url,還能夠將版本號放入Http請求頭信息中,但不如放在url中方便。
也能夠放在子域名上(放在子域名上會存在跨域的問題,)
(4):在RESTful架構中,每一個網址表明一種資源(resource),因此網址中不能有動詞,只能有名詞,
並且所用的名詞每每與數據庫的表格名對應。通常來講,
數據庫中的表都是同種記錄的"集合",因此API中的名詞也應該使用複數。
(5):若是記錄數量不少,服務器不可能都將它們返回給用戶。API應該提供參數,過濾返回結果。
(6)根據請求方式的不一樣,來區分不一樣的行爲。post----get----put----patch----delete。
(7):服務器向用戶返回的狀態碼和提示信息。
(8):返回json數據。

經常使用的請求方式有那些?

 

答:Get :獲取數據,Post:建立數據,Patch:部分修改
Put :所有修改,DELETE:刪除數據,
Options:若是有跨域,會先發一個option請求,先作預檢,完了在執行本身發的請求

 

常見的狀態碼有那些?

答:200:響應成功,302:重定向,403:Forbidden
404:找不到頁面,500:服務端代碼有誤

談談你對restful framework的認識?

答:咱們一開始是沒有用restful framework,
用django寫一些裝飾器或中間件也能實現。
可是它爲咱們事先提供了一部分接口,
經常使用的有:獲取版本,認證,權限,分流 ,
咱們只須要按照restful的規範,只須要寫幾個類就行了,或者在配置文件裏面配置一下就可使用。
尤爲是在用戶訪問頻率限制的時候,restful裏面都已經封裝好了,咱們直接調用它的方法就好了。
咱們寫的時候是基於CBV模式寫的,這個和django中的CBV是同樣的, 請求先進來會走dispatch方法,根據請求方法不一樣反射執行不一樣的方法。 咱們寫的類是繼承APIView的View,去執行它的dispatch先找本身的,本身沒有就找父類的。
restful framework執行流程? restful framework請求進來到達路由.as_view(),在as_view裏面return了一個view函數,請求進來先執行一個view函數。 as_views調用了dispath方法根據請求方式的不一樣,觸發不一樣的方法。 initialize_request這個方法接收客戶端的request請求,再從新封裝成新的request。請求一些相關的東西放到request中 而後進行初始化,獲取版本,認證調用request.user方法,檢查權限,檢查限制訪問。 執行對應視圖函數。 對返回結果再次進行加工。重要的功能在APIviews的dispath中實現。

 

Django Rest Framework 的的請求生命週期

 

TTP請求 —> wsgi —> 中間件 —> 路由分發 —> 執行對應類的dispatch方法 —> 視圖函數 —>返回 
採用CBV的請求方式。

通過「中間件」時,依次執行中間件內部的 process_request--->process_view--->process_template_response
---->process_exception---->process_response

 

 

restful framework中包括那些?

答:有版本,認證,權限,訪問頻率的限制,路由系統,視圖,渲染器,序列化,分頁,解析器。

 

認證?

答:執行認證功能,確認進行後續操做的用戶是被容許的,perform_authentication方法返回通過認證的用戶對象,
傳入的request是從新封裝過的。

版本?

功能的更新迭代。
能夠放在url,也能夠放在請求頭,但不是很方便,也能夠放在子域名上,但存在跨域的問題。
能夠用三種方法實現:get傳參方式,基於url正則傳參
若是url中有版本信息,就獲取發送到服務端的版本,返回一個元組.

 

權限?

答:若是用戶經過認證,檢查用戶是否有權限訪問url中所傳的路徑,如用用戶訪問的是沒有沒有權限的路徑,則會拋出異常。

 

訪問頻率的限制?

答:做用是檢查用戶是否被限制了訪問主機的次數。

 

解析器

答:對請求數據進行解析,對請求體進行解析。

 


如何進行序列化的?

答:有兩種方法實現
一:從數據去取出數據,return response
二:從數據庫求出數據,賦值給instance,設置是不是單對象,再進行賦值,而後return response(.data)返回。
ser = UsersSerializer(instance=user_list,many=True)
return Response(ser.data)

 

序列化?

答:解決QuerySet序列化問題。
序列化:
基本序列化:單對象,多對象。instance=user_list,many=True
跨表序列化:
複雜序列化:
基於Model實現序列化:
生成url:
所有生成url:
請求數據驗證:
相關文章
相關標籤/搜索