1.什麼是RESTful
REST是英文representational state transfer(表象性狀态轉變)或者表述性狀态轉移;Rest是web服務的一種架構風格;使用HTTP,URI,XML,JSON,HTML等廣泛流行的标準和協定;輕量級,跨平台,跨語言的架構設計;它是一種設計風格,不是一種标準,是一種思想.即滿足這些限制條件和原則的應用程式或設計就是 RESTful
2.RESTFUL特點
1、每一個URI代表1種資源;
2、用戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來擷取資源,POST用來建立資源(也可以用于更新資源),PUT用來更新資源,DELETE用來删除資源;
3、通過操作資源的表現形式來操作資源;
4、資源的表現形式是XML或者HTML;
5、用戶端與服務端之間的互動在請求之間是無狀态的,從用戶端到服務端的每個請求都必須包含了解請求所必需的資訊。
3.HTTP動詞
這些動詞一般預設為:
GET 根據使用者id查詢使用者資料
POST 新增使用者
PUT 修改使用者資訊
DELETE 删除使用者資訊
常用的HTTP動詞:
GET(SELECT):從伺服器取出資源(一項或多項)。
POST(CREATE):在伺服器建立一個資源。
PUT(UPDATE):在伺服器更新資源(用戶端提供改變後的完整資源)(修改全部資料)
PATCH(UPDATE):在伺服器更新資源(用戶端提供改變的屬性)(修改部分資料)
DELETE(DELETE):從伺服器删除資源。
不常用的HTTP動詞:
HEAD:擷取資源的中繼資料。
OPTIONS:擷取資訊,關于資源的哪些屬性是用戶端可以改變的。
例子:
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:删除某個指定動物園的指定動物
4.過濾資訊
如果記錄數量很多,伺服器不可能都将它們傳回給使用者。API應該提供參數,過濾傳回結果。
下面是一些常見的參數。
?limit=10:指定傳回記錄的數量
?offset=10:指定傳回記錄的開始位置。
?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。
?sortby=name&order=asc:指定傳回結果按照哪個屬性排序,以及排序順序。
?animal_type_id=1:指定篩選條件
參數的設計允許存在備援,即允許API路徑和URL參數偶爾有重複。比如,GET /zoo/ID/animals 與 GET /animals?zoo_id=ID 的含義是相同的。
5.狀态碼
伺服器向使用者傳回的狀态碼和提示資訊,常見的有以下一些:
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 - [*]:伺服器發生錯誤,使用者将無法判斷發出的請求是否成功。