什么是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() 方法來執行認證,權限,頻率的控制。
