程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Django】RESTful API接口設計風格

編輯:Python

它是一種web軟件結構的API開發風格,注意它僅僅只是代表著一種風格,並不代表著約束、標准。

一、協議、域名和版本

盡量使⽤https協議,使⽤專屬域名來提供API服務,並在URL⾥標注api版本,如下

https://api.example.com/v1
https://www.example.com/api/v1

二、 URI(統⼀資源標識符)

在RESTful架構中,每個⽹址代表⼀種資源(resource),這個⽹絡地址就是URI(uniform resource identifier), 有時也被稱為URL(uniform resource locator)。因為URI對應⼀種資源,所以⾥⾯不能有動詞,只能有名詞⼀般來說,數據庫中的表都是同種記錄的"集合"(collection),所以API中的名詞也應該使⽤復數。

https://api.example.com/v1/users
⽤戶列表資源地址

https://api.example.com/v1/users/{id}
⽤戶id=5資源。注意:這⾥是users/5,⽽不是user/5,API中的名詞應該使⽤復數。⽆論⼦資源或者所有資源。

https://api.example.com/v1/users/{id}/articles
⽤戶id=5發表的⽂章列表

非RestFul設計,以往我們都會這麼寫:

http://xxx.com:8080/get/getArticle (查詢文章)
http://xxx.com:8080/post/addArticle (新增文章)
http://xxx.com:8080/update/updateArticle (更新文章)
http://xxx.com:8080/delete/deleteArticle (刪除文章)

RestFul設計風格:

GET http://xxx.com:8080/get/articles(查詢文章)
POST http://xxx.com:8080/post/articles(新增文章)
PUT http://xxx.com:8080/update/articles(新增文章)
DELETE http://xxx.com:8080/dalete/articles(刪除文章)

三、HTTP動詞

對於資源的具體操作類型,由HTTP動詞表示。
常⽤的HTTP動詞有下⾯四個(括號⾥是對應的SQL命令)

GET(SELECT):從服務器取出資源(⼀項或多項)。
POST(CREATE):在服務器新建⼀個資源。
PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
DELETE(DELETE):從服務器刪除資源。

還有三個不常⽤的HTTP動詞。

PATCH(UPDATE):在服務器更新(更新)資源(客戶端提供改變的屬性)。
HEAD:獲取資源的元數據。
OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。

四、過濾信息(Filtering)

如果記錄數量很多,服務器不可能都將它們返回給⽤戶。API應該提供參數,過濾返回結果。
下⾯是⼀些常⻅的參數。

?limit=10:指定返回記錄的數量
?offset=10:指定返回記錄的開始位置。
?page=2&per_page=100:指定第⼏⻚,以及每⻚的記錄數。
?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。
?animal_type_id=1:指定篩選條件

五、狀態碼(Status Codes)

服務器向⽤戶返回的狀態碼和提示信息,常⻅的有以下⼀些(⽅括號中是該狀態碼對應的
HTTP動詞)。
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 - [*]:服務器發⽣錯誤,⽤戶將⽆法判斷發出的請求是
否成功。

六、錯誤處理

如果狀態碼是4xx,服務器就應該向⽤戶返回出錯信息。⼀般來說,返回的信息中將error作為鍵名,出錯信息作為鍵值即可。

{

error: "Invalid API key"
}

七、返回結果

GET /collection:返回資源對象的列表(數組)
GET /collection/resource:返回單個資源對象
POST /collection:返回新⽣成的資源對象
PUT /collection/resource:返回完整的資源對象
PATCH /collection/resource:返回完整的資源對象
DELETE /collection/resource:返回⼀個空⽂檔


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved