它是一種web軟件結構的API開發風格,注意它僅僅只是代表著一種風格,並不代表著約束、標准。
盡量使⽤https協議,使⽤專屬域名來提供API服務,並在URL⾥標注api版本,如下
https://api.example.com/v1
https://www.example.com/api/v1
在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動詞有下⾯四個(括號⾥是對應的SQL命令)
GET(SELECT):從服務器取出資源(⼀項或多項)。
POST(CREATE):在服務器新建⼀個資源。
PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
DELETE(DELETE):從服務器刪除資源。
還有三個不常⽤的HTTP動詞。
PATCH(UPDATE):在服務器更新(更新)資源(客戶端提供改變的屬性)。
HEAD:獲取資源的元數據。
OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。
如果記錄數量很多,服務器不可能都將它們返回給⽤戶。API應該提供參數,過濾返回結果。
下⾯是⼀些常⻅的參數。
?limit=10:指定返回記錄的數量
?offset=10:指定返回記錄的開始位置。
?page=2&per_page=100:指定第⼏⻚,以及每⻚的記錄數。
?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。
?animal_type_id=1:指定篩選條件
服務器向⽤戶返回的狀態碼和提示信息,常⻅的有以下⼀些(⽅括號中是該狀態碼對應的
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:返回⼀個空⽂檔