一、REST來源
REST:是一組架構約束條件和原則,REST是Roy Thomas Fielding在他2000年的博士論文中提出的。 Roy Thomas Fielding是HTTP協(xié)議(1.0版和1.1版)的主要設計者、Apache服務器作者之一、Apache基金會第一任主席
二、什么是REST
REST(Representational State Transfer):表現(xiàn)層狀態(tài)轉移,一種軟件架構風格,不是標準。既然不是標準,我可以遵守,也可以不遵守!!! 什么是表現(xiàn)層狀態(tài)轉移:
Representational (表現(xiàn)層) State Transfer(狀態(tài)轉移):通過HTTP動詞實現(xiàn)。
- 總結:URL定位資源,HTTP動詞(GET,POST,PUT,DELETE)描述操作。
三、什么是RESTful
基于REST構建的API就是RESTful風格
四、如何設計RESTful風格的API
1.路徑設計
在RESTful架構中,每個網(wǎng)址代表一種資源(resource),所以網(wǎng)址中不能有動詞,只能有名詞,而且所用的名詞往往與數(shù)據(jù)庫的表名對應,一般來說,數(shù)據(jù)庫中的表都是同種記錄的”集合”(collection),所以API中的名詞也應該使用復數(shù)。 舉例來說,有一個API提供動物園(zoo)的信息,還包括各種動物和雇員的信息,則它的路徑應該設計成下面這樣。
https://api.example.com/v1/zoos https://api.example.com/v1/animals https://api.example.com/v1/employees
2.HTTP動詞設計
對于資源的具體操作類型,由HTTP動詞表示,常用的HTTP動詞如下:
請求方式 含義 GET 獲取資源(一項或多項) POST 新建資源 PUT 更新資源(客戶端提供改變后的完整資源) DELETE 刪除資源
如何通過URL和http動詞獲悉要調用的功能:
請求方式 含義 GET /zoos 列出所有動物園 POST /zoos 新建一個動物園 GET /zoos/ID 獲取某個指定動物園的信息 PUT /zoos/ID 更新某個指定動物園的信息(提供該動物園的全部信息) DELETE /zoos/ID 刪除某個動物園 GET /zoos/ID/animals 列出某個指定動物園的所有動物 DELETE /zoos/ID/animals/ID 刪除某個指定動物園的指定動物
RESTFul API的一些最佳實踐原則:
- 使用HTTP動詞表示增刪改查資源, GET:查詢,POST:新增,PUT:更新,DELETE:刪除
- 返回結果必須使用JSON
- HTTP狀態(tài)碼,在REST中都有特定的意義:200,201,202,204,400,401,403。比如401表示用戶身份認證失敗,403表示你驗證身份通過了,但這個資源你不能操作。
- 如果出現(xiàn)錯誤,返回一個錯誤碼: 10000=通用參數(shù)錯誤10001=資源未找到
- API 必須有版本的概念, v1, v2
- 使用Token令牌來做用戶身份的校驗與權限分級
- url中大小寫不敏感,不要出現(xiàn)大寫字母
- 使用中劃線而不是使用下劃線做URL路徑中字符串連接
- 有一份漂亮的文檔
RESTFul API好用嗎?
某些情況好用,某些情況不好用。什么情況好用,什么情況不好用呢?
- 一個經(jīng)驗性的總結:對于開放的API,比如豆瓣、新浪微博、GitHub,好用,非常合適
- 對于內部開發(fā),不好用
- REST是一種軟件架構風格,不是標準。既然不是標準,可以遵守,也可以不遵守!
結論
實踐過程中開發(fā)人員靈活把握