什么是REST?
REST是一個標准,一種規范
,遵循REST風格可以使開發的接口通用,便於調用者理解接口的作用。
使url更容易理解,讓增刪改清晰易懂,在前后端分離開發中按照這一規范能加快開發效率,減少不必要的討論時間。
- GET: 獲取特定資源(通過ID)或資源集合
- POST: 創建一個新資源
- PUT: 更新特定資源(通過ID)
- DELETE: 按ID刪除特定資源
詳情可見:https://baike.baidu.com/item/rest/6330506
可以理解為: URL唯一代表資源,HTTP請求方式來區分用戶行為。
URL的設計規范: GET: 127.0.0.1:9001/books/ 獲取所有數據 GET: 127.0.0.1:9001/books/{id} 獲取單條數據 POST: 127.0.0.1:9001/books/ 增加數據 DELETE: 127.0.0.1:9001/books/{id} 刪除數據 PUT: 127.0.0.1:9001/books/{id} 修改數據 數據響應規范: GET: 127.0.0.1:9001/books/ 返回[{}, {}, {}] GET: 127.0.0.1:9001/books/{id} {} 單條數據 POST: 127.0.0.1:9001/books/ {} 添加成功的數據 DELETE: 127.0.0.1:9001/books/{id} "" 返回空 PUT: 127.0.0.1:9001/books/{id} {} 更新后完整的數據 錯誤處理: { "error": "message" }
DRF
DRF (Django REST framework)Django REST框架是用於構建Web API的工具, 是功能強大且靈活的工具包。
通常簡稱為DRF框架 或 REST framework。DRF框架是建立在Django框架基礎之上,由Tom Christie大牛二次開發的開源項目。
DRF中有封裝了十大組件,分別是序列化組件,視圖組件,認證組件,權限組件,頻率組件,解析器,分頁器,響應器,url控制器,版本控制。這十大組件,能夠很好的幫助開發人員提升開發效率。
可以用來實現前后端分離的項目
APIView
APIView 是DRF概念體系中最基本類視圖,也是所有視圖的基類,繼承自Django的 View 父類。
APIView 與 View 的不同之處在於:
- 傳入到視圖方法中的是REST framework的 Request 對象,而不是Django的 HttpRequeset 對象;
- 視圖方法可以返回REST framework的 Response 對象,視圖會為響應數據設置 render 符合前端要求的格式;
- 任何 APIException 異常都會被捕獲到,並且處理成合適的響應信息;
- 在進行 dispatch() 分發前,會對請求進行身份認證、權限檢查、流量控制
支持定義的屬性:
- authentication_classes 列表或元祖,身份認證類
- permissoin_classes 列表或元祖,權限檢查類
- throttle_classes 列表或元祖,流量控制類
在 APIView 中仍以常規的類視圖定義方法來實現 get() 、 post() 或者其他請求方式的方法。
APIView源碼分析
1. 路由層調用 as_view() 方法
2. 由於視圖類 LoginView 類沒有 as_view() 方法,所以去父類APIView中找
執行View里的 as_view() 方法
3. as_view() 最終還是執行類 APIView 里的 dispatch() 方法。
4. 通過 initialize_request() 將原生 request 封裝到 Request 中,依次執行 initial() 里面的認證,權限,概率組件
5. Request 類做了什么
把一些常用的方法重新封裝了,如GET方法封裝成了query_params,並偽裝成屬性。
6. 最后通過映射進行分發,並返回
DRF的關鍵就是重寫了 dispatch 方法,在 dispatch 中對原生的 request 進行了封裝,然后通過 initial() 方法來執行認證,權限,頻率的控制。