1 REST
REST是一種軟件架構風格,如果你的接口是REST接口,那么該接口可被認為是REST風格的。
REST接口是圍繞資源展開的,HTTP 的URL即資源,利用HTTP的協議,其實rest本也可以和HTTP無關,但是現在大家普遍的使用REST都是依托於HTTP協議。.
2 URI語法
URI = scheme “://” authority “/” path [ “?” query ][ “#” fragment ]
scheme: 指底層用的協議,如http、https、ftp host: 服務器的IP地址或者域名 port: 端口,http中默認80 path: 訪問資源的路徑,就是咱們各種web 框架中定義的route路由 query: 為發送給服務器的參數 fragment: 錨點,定位到頁面的資源,錨點為資源id
3 URL路徑
3.1 endpoint
路徑又稱"終點"(endpoint),表示API的具體網址。
在RESTful架構中,每個網址代表一種資源,所以網址中不能有動詞,只能有名詞,而且所用的名詞往往與數據庫的表格名對應。
一般來說,數據庫中的表都是同種記錄的"集合"(collection),所以API中的名詞也應該使用復數。https://school/v1/classes
https://school/v1/teachers https://school/v1/students
- 3.1 URL規則
- 1 名詞對應數據庫中的表
- 2 URL中不能有動詞
- 3 URL結尾不應該包含斜杠“/”
- 4 正斜杠分隔符”/“必須用來指示層級關系
- 5 使用連字符”-“來提高URL的可讀性,而不是使用下划線”_”
- 6 URL路徑中首選小寫字母
- 7 URL路徑名詞均為復數
4 HTTP動詞
對於URL資源的具體操作類型,由HTTP動詞表示。
常用的HTTP動詞有下面五個(括號里是對應的SQL命令)。
GET(SELECT):從服務器取出資源(一項或多項)。
POST(CREATE):在服務器新建一個資源。
PUT(UPDATE):在服務器更新資源(客戶端提供改變后的完整資源)。
PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
DELETE(DELETE):從服務器刪除資源。
5 資源過濾
如果只需要查詢某些條件的數據API應該提供參數,過濾返回結果。
下面是一些常見的參數:
?limit=10:指定返回記錄的數量
?offset=10:指定返回記錄的開始位置。
?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。
?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。
?teacher_subject=語文:指定篩選條件
6 返回
返回狀態碼推薦標准HTTP狀態碼
有很多服務器將返回狀態碼一直設為200,然后在返回body里面自定義一些狀態碼來表示服務器返回結果的狀態碼。
由於REST API是直接使用的HTTP協議,所以它的狀態碼也要盡量使用HTTP協議的狀態碼。
200 OK 服務器返回用戶請求的數據,該操作是冪等的
201 CREATED 新建或者修改數據成功
204 NOT CONTENT 刪除數據成功
400 BAD REQUEST 用戶發出的請求有問題,該操作是冪等的
401 Unauthoried 表示用戶沒有認證,無法進行操作
403 Forbidden 用戶訪問是被禁止的
422 Unprocesable Entity 當創建一個對象時,發生一個驗證錯誤
500 INTERNAL SERVER ERROR 服務器內部錯誤,用戶將無法判斷發出的請求是否成功
503 Service Unavailable 服務不可用狀態,多半是因為服務器問題,例如CPU占用率大,等等
返回結果
GET /teachers 返回資源列表
GET /teachers/:id 返回單獨的資源
POST /teachers 返回新生成的資源對象
PUT /teachers/:id 返回完整的資源對象
PATCH /teachers/:id 返回被修改的屬性
DELETE /teachers/:id 返回一個空文檔
