drf(Django-restframework)框架安裝
- drf是Django的插件, 所以要提前安裝Django
- 安裝drf插件:
pip3 install djangorestframework
- 使用drf時, 要在django項目中的settings文件中注冊
Web API接口
什么是接口
規定了提交參數的請求方式,訪問 其可以獲取響應的反饋數據的url鏈接
包含了四部分: url鏈接 + 請求方式 + 請求參數 + 響應數據
-
url: 長得像返回數據的url鏈接
https://api.map.baidu.com/place/v2/search
-
請求方式: get post put patch delete
-
請求參數: json或xml格式的key-value類型數據
- ak: 124524542EJbhbuH899
- regin: 上海
- query: 大本營
- output: json
-
響應結果: json或xml格式的數據
-
上方請求參數的output參數值決定了響應數據的格式
-
{ "status": 0, "message": "ok", "results": [ { "name": "大本營", "location": { "lat": 31.45346, "lng": 146.23423 }, "address": "本環路123號", "province": "上海市", } ...... ] }
-
接口文檔的編寫:YApi
YApi是去哪兒網前段計數中心的一個開源可視化 接口管理平台.
詳情見官方文檔
接口測試工具: Postman
Postman是一款接口調試工具, 支持多操作系統平台, 是測試接口的首選工具
可以在官網下載使用
推薦Postman的開源代替品: Postwoman
restful接口規范
RESTful 是目前最流行的 API 設計規范,用於 Web 數據接口的設計。
url設計
1、保障數據安全
- 接口都是操作前后端數據的, 為了保證數據的安全, 采用https協議
2、接口特征表現
-
接口用來操作數據, 與網址有區別, 所有用特定的關鍵字表示接口
-
https://api.baidu.com https://www.baidu.com/api
-
3、多版本資源共存
-
如果一個資源存在多版本結果, 在url鏈接中要用特定符號來兼容多版本共存
https://api.baidu.com/v1/books/ https://api.baidu.com/v2/books/
4、數據就是資源
接口操作的數據稱之為資源, 在url中體現 資源的名稱, 不能體現操作資源的動詞, 錯誤示范:https://api.baidu.com/get_books
-
常規資源接口
https://api.baidu.com/books/ https://api.baidu.com/books/(pk)/
-
非常規接口 和某資源不是特別密切或是不止一種資源
https://api.baidu.com/login/ https://api.baidu.com/place/search/
5、群資源操作
一般還有額外的限制條件, 如排序、限制調試、分頁等
https://api.baidu.com/v1/books/?ordering=-price&limit=3
這讓人就知道 搜索價格最貴的前三本書
6、資源操作由請求方式決定
-
get 獲取單個或多個資源
https://api.baidu.com/books/ 群查,返回多個結果對象 https://api.baidu.com/books/(pk)/ 單查,返回單個結果對象
-
post 新增單個或多個資源
https://api.baidu.com/books/ 單增 提交單個數據字典, 完成單增, 返回單個結果對象 群增 提供多個數據字典的數組, 完成群增, 返回多個結果對象
-
put 整體修改單個或多個資源
-
https://api.baidu.com/books/ 整體修改多個, 提供多個數據字典的數組(數據字典中包含主鍵), 完成整體多個修改,返回對個結果對象
-
https://api.baidu.com/books/(pk)/ 整體修改單個, 提供單個數據字典(主鍵在url中體現), 完成整體單個修改, 返回單個結果對象
-
-
patch 局部修改單個或多個資源
方式與put相同, 不同的是 操作的資源如果有5個key-value鍵值對, put請求提供的字典必須全包含, 但是patch提供的字典包含的鍵值對0-5個都可以 一般用patch
-
delete 刪除單個或多個資源
-
https://api.baidu.com/books/ 多刪, 提供多個資源主鍵數據, 完成群刪, 不做任何資源的返回, 一般返回的結果就是: 成功或失敗
-
https://api.baidu.com/books/(pk)/ 單刪, 不需要提供額外數據, 完成單刪, 不做資源的返回
-
響應結果
1、響應對象中要包含網絡狀態碼(網絡狀態信息和網絡狀態碼捆綁出現, 不要額外設置)
- 1xx: 基本信息
- 2xx 成功
- 200 常規請求 成功
- 201 創建成功
- 3xx 重定向
- 4xx 客戶端 錯誤
- 400 錯誤請求
- 403 請求無權限
- 404 請求資源不存在
- 5xx 服務器錯誤 500
2、數據狀態碼 (一般是前后端約定規則)
如:
0: 成功
1: 失敗 1xx 具體失敗信息 要在接口文檔中明確寫出
2: 無數據 2xx 具體無數據信息
3、數據狀態信息
一般不僅僅是對數據狀態碼的解釋, 更多的是對結果的描述, 給前端開發者閱讀
{
"status": 0,
"message": "ok",
"results": [
{
"name": "大本營",
"location": {
"lat": 31.45346,
"lng": 146.23423
},
"address": "本環路123號",
"province": "上海市",
}
......
]
}
4、數據結果
一般是數組 \ 字典形式, 如果有子資源(圖片 視頻 音頻), 返回資源的url鏈接
{
"status": 0,
"msg": "ok",
"results": [
{
"name": "小王子",
"img": "https://api.baidu.com/media/books/1.jpg"
}
]
}