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