Resource Representational State Transfer 直接翻譯:表現層狀態轉移
簡單概括:
URL:定位資源
HTTP請求方式:(GET POST DELETE PUT)描述操作
請求狀態碼:描述結果
看url就知道要什麼
看http method就知道幹什麼
看http status code就知道結果如何
簡介版
REST描述的是在網路中client和server的一種互動模式.
在Server提供的RESTful API中,url只使用名詞來指定資源
資源是REST架構或者整個網路處理的核心.
通過HTTP請求方式來實現資源的狀態扭轉.
Server和Client之間傳遞某資源的一種方式,用JSON或者其他方式
用HTTP Status Code傳遞Server的狀態資訊.最常見的200表示成功,500表示Server內部錯誤
Web端和Server只使用上述定義的API來傳遞資料和改變資料狀態。格式一般是JSON。iOS和Android同理可得。由此可見,Web,iOS,Android和第三方開發者變為平等的角色通過一套API來共同消費Server提供的服務。
Transfer:通俗來講就是:資源在網路中以某種表現形式進行狀態轉移。分解開來:
Resource:資源,即資料(前面說過網路的核心)。比如 newsfeed,friends等;
Representational:某種表現形式,比如用JSON,XML,JPEG等;
State Transfer:狀態變化。通過HTTP動詞實現。
略詳細版
-
協議
API與使用者的通訊協議,總是使用HTTPs協議 -
域名 應該儘量將API部署在專用域名之下
https://api.example.com
如果確定API很簡單,不會有進一步擴充套件,可以考慮放在主域名下
https://example.org/api/
-
版本
應該將API的版本號放入URL
https://api.example.com/v1/
另一種做法是:將版本號放在HTTP頭資訊中, -
路徑
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
-
動詞 對於資源的具體操作型別,由HTTP動詞表示 GET(SELECT):從伺服器取出資源(一項或多項)。 POST(CREATE):在伺服器新建一個資源。 PUT(UPDATE):在伺服器更新資源(客戶端提供改變後的完整資源)。 PATCH(UPDATE):在伺服器更新資源(客戶端提供改變的屬性)。 DELETE(DELETE):從伺服器刪除資源。 還有兩個不常用的HTTP動詞
GET /zoos:列出所有動物園 POST /zoos:新建一個動物園 GET /zoos/ID:獲取某個指定動物園的資訊 PUT /zoos/ID:更新某個指定動物園的資訊(提供該動物園的全部資訊) PATCH /zoos/ID:更新某個指定動物園的資訊(提供該動物園的部分資訊) DELETE /zoos/ID:刪除某個動物園 GET /zoos/ID/animals:列出某個指定動物園的所有動物 DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物 -
過濾資訊(Filtering) 如果記錄數量很多,伺服器不可能都將它們返回給使用者,API應該提供引數,過濾返回結果 ?limit=10:指定返回記錄的數量 ?offset=10:指定返回記錄的開始位置。 ?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。 ?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。 ?animal_type_id=1:指定篩選條件
-
狀態碼(Status Code)
200 OK - [GET]:伺服器成功返回使用者請求的資料,該操作是冪等的(Idempotent)。
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 - [*]:伺服器發生錯誤,使用者將無法判斷髮出的請求是否成功。
複製程式碼