drf
瞭解前後端分離和不分離
drf是前後端分離的
在web開發模式中有前後端分離和前後端不分離,這兩種開發模式。
什麼是前後端不分離?
這種模式下,耦合度比較高,django就是前後端不分離的。
由於app的發展,他需要的只是一份單純的數據,而不是一堆html的代碼。有了這樣一份數據之後,一份可以給app,一份呢,可以給pc端的前端使用,減少工作量。
什麼是前後端分離?
後端主要是提供接口、提供數據
前端和app就可以調用接口、展示數據
注意,調用接口之後,返回的數據是json數據或者xml數據
前端想要什麼樣的頁面,後端不管,只是給你展示數據。那這樣的話,耦合度就比較低。
前後端分離
優勢
耦合度比較低;
多端適用;(app、前端、公衆號都可以共同使用這一份數據)
前後端開發職責模糊;
解決開發效率問題;
可以提高前端程序員的能力;
解決服務器壓力;(前端的部署在前端服務器上,後端的部署在後端服務器上)
缺點
前端人員學習的東西增加(vue js 啊這些);
後端程序員需要給前端寫文檔,表示這些接口是幹什麼用的,以及返回的是什麼樣的數據等等;
前後端分離後,後端的使用規範
這個規範就叫RESTful API
一、域名
把域名變成一個接口
應該儘量將api (也就是接口)部署在專用域名之下,比如
https://api.example.com
如果確定API很簡單,不會有進一步擴展,可以考慮放在主域名下。
https://example.com/api/
這樣會解決跨域的問題
二、協議
推薦https
三、版本
app端需要更新,app不像網頁,後臺一更新,你訪問的時候就是更新好的。
app端的更新,是需要兼容的。也許有的人就不想更新,那你也得保存不跟新的那部分人額數據4
也是通過接口來實現的,將API的版本號放入URL
http://www.example.com/app/1.0/ 這個就表示1.0的版本
http://www.example.com/app/1.1 這個表示1.1的版本
http://www.example.com/app/2.0/ 這個表示2.0的版本
四、路徑
推薦使用名詞加複數,什麼意思呢,
就比如你想獲取1.0版本下的所有的蘋果,那麼接口應該是
http://www.example.com/app/1.0/
五、http請求方法
利用的HTTP方法可以分離網址中的資源名稱的操作。
這樣會減少接口
GET-------獲取資源
POST-------增加資源
DELETE------刪除資源
PATCH-------部分更新資源
PUT------全部更新資源
比如:我們想刪除資源
http://example.com/app/1.0/ students/1/
一般根據id進行唯一標識來刪除,
我們在經行增刪改查的時候,都可以使用這個接口,只是請求方法發生了改變
六、過濾信息
比如分頁:
接口就可以寫成
http://example.com/app/1.0/ students/1/?page=2
出來分頁之外,還可以指定:
?limit=10:指定返回記錄的數量
?offset=10:指定返回記錄的開始位置。
?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。
?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。
?animal_type_id=1:指定篩選條件
七、狀態碼
200 OK - [GET]:服務器成功返回用戶請求的數據
201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
202 Accepted - []:表示一個請求已經進入後臺排隊(異步任務)
204 NO CONTENT - [DELETE]:用戶刪除數據成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作
401 Unauthorized - []:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
403 Forbidden - [] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
404 NOT FOUND - []:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。
406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是隻有XML格式)。
410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。
500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將無法判斷髮出的請求是否成功。
八、錯誤處理:
{
error:“Invalid API key”
}
會返回這樣一個字符串,但是對於移動端的返回錯誤格式一般是
九、返回結果
返回的數據都是json
GET /collection:返回資源對象的列表(數組)
GET /collection/resource:返回單個資源對象
POST /collection:返回新生成的資源對象
PUT /collection/resource:返回完整的資源對象
PATCH /collection/resource:返回完整的資源對象
DELETE /collection/resource:返回一個空文檔