Restful-API設計最佳實戰–Django播客系統(五)
文章目錄
- Restful-API設計最佳實戰--Django播客系統(五)
- RESTFul
- 1.協定
- 2.HTTP方法
- 3.使用名稱
- 4.集合功能
- 5.狀态碼
- 6.錯誤處理
- 7.版本
- 8. 傳回結果
RESTFul
- REST(Representational State Transfer),表現層狀态轉移。
- 它首次出現在2000年Roy Fielding的博士論文中,Roy Fielding是HTTP規範的主要編寫者之一。
- 表現層是資源的表現層,對于網絡中的資源就需要URI(Uniform Resource Identifier)來指向。
1.協定
- 使用HTTP或者HTTPS。對外若有安全性要求,可以使用HTTPS。但是内部服務間調用可以使用HTTP或HTTPS。
2.HTTP方法
- HTTP請求中的方法表示執行的動作
常用方法(動詞) | 說明 |
GET | 擷取資源 |
POST | 建立新的資源 |
PUT | 更新資源 |
PATCH | 部分更新資源 |
DELETE | 删除資源 |
3.使用名稱
URL指向資源,在URL路徑的描述中,隻需要出現名稱,而不要出現動詞。動詞由HTTP方法提供。
不要單複數混用,建議名稱使用複數。
Restful的核心是資源,URL應該指向資源,是以應該是使用名稱表達式,而不是動詞表達。
方法 | 路徑 | 說明 |
GET | | 傳回所有文章 |
GET | | 傳回id為10的文章 |
POST | | 建立新的文章 |
PUT | | 更新id為10的文章 |
DELETE | | 删除id為10的文章 |
PATCH | | 部分更新id為10的文章資料 |
- 不要出現如下的通路路徑
/getAllPosts
/addPost
/updatePost
/delPost
- GET方法隻是擷取資源,而不是改變資源狀态。改變資源請使用POST,PUT,DELETE等方法。
- 例如:使用
就可以擷取資源了,但是卻使用GET /posts/10
或Get /posts/10/del
,本意是想删除。但這樣不好,GET方法請求隻為擷取資源,不要改變資源狀态。GET /posts/10?v=del
- 子資源的通路
方法 | 路徑Endpoint | 說明 |
GET | | 傳回id為10的文章的所有作者 |
GET | | 傳回id為10的文章的作者中id為4的 |
4.集合功能
- 過濾Filtering
- 指定過濾條件
GET /posts?tag=python
- 排序Sorting
- 指定排序條件。有很多種設計風格,例如使用
表示asc,+
表示desc。-
擷取GET /posts?sort=+title,-id
GET /posts?sort=title_asc,id_desc
- 分頁Pagination
- 一般情況下,查詢傳回的記錄數非常多,必須分頁。
GET /posts?page=58&size=20
5.狀态碼
- 使用HTTP響應的狀态碼表示動作的成功與否。
- 2xx表示使用者請求服務端成功的處理;4xx表示使用者請求的錯誤;5xx表示伺服器端出錯了。
Status Code | 說明 | Method | 說明 |
200 | OK | GET | 成功擷取資源 |
201 | CREATED | POST,PUT,PATCH | 成功建立或修改 |
204 | NO CONTENT | DELETE | 成功删除資源 |
400 | Bad Request | ALL | 請求中有錯誤,例如:GET時參數有問題,PUT時送出的資料錯誤等 |
401 | Unauthorized | ALL | 權限未通過認證 |
403 | Forbidden | ALL | 有無權限都禁止通路該資源 |
404 | Forbidden | ALL | 請求資源不存在 |
500 | internal Server Error | ALL | 伺服器端錯誤 |
- 詳細狀态碼參考https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
6.錯誤處理
- 在Restful API設計中,錯誤處理也非常重要。單單從無狀态碼中無法詳盡描述錯誤的資訊。
- 傳回消息
{error:"user NOT Found"}
- 從錯誤消息中了解到錯誤号、錯誤資訊、錯誤描述等資訊。甚至更詳細的資訊可以通過code查閱文檔
{
"code":10056,
"message":"Invalid ID",
"description":"More details"
}
7.版本
- 強烈要求使用版本、版本号使用簡單數字,例如v2。
- 2種風格
-
這種風格會跨域,适合較大的項目http://api.xdd.com/v1/posts/10
-
http://www.xdd.com/api/v1/posts/10
8. 傳回結果
方法 | 路徑 | 說明 |
GET | /posts | 傳回所有文章的清單 |
GET | /posts/10 | 傳回id為10的文章對象 |
POST | /posts | 建立更新的文章并傳回這個對象 |
PUT | /posts/10 | 更新id為10的文章并傳回這個對象 |
DELETE | /posts/10 | 删除id為10的文章傳回一個空對象 |
PATCH |
- 資料一律采用JSON格式