一.什麼是RESTful 面向資源
簡單的說:RESTful是一種架構的規範與約束、原則,符合這種規範的架構就是RESTful架構。
先看REST是什麼意思,英文Representational state transfer 表述性狀態轉移 其實就是對 資源 的表述性狀態轉移。
(什麼是表述性:就是指客戶端請求一個資源,服務器拿到的這個資源,就是表述)
資源的地址 在web中就是URL (統一資源標識符)
資源是REST系統的核心概念。 全部的設計都是以資源爲中心
結合項目怎麼識別資源
1.商品加入購物車 購物車
2.提交訂單 訂單
3.建立用戶 用戶
圍繞資源進行 添加,獲取,修改,刪除,以及對符合特定條件的資源進行列表操做 。針對資源設計接口
二.關於規範與約束有哪些?
RESTful 架構的核心規範與約束:統一接口
分爲四個子約束:
1.每一個資源都擁有一個資源標識,每一個資源的資源標識能夠用來惟一地標明該資源
2.消息的自描述性
3.資源的自描述性。
4.HATEOAS Hypermedia As The Engine Of Application State(超媒體做爲應用狀態引擎)
即客戶只能夠經過服務端所返回各結果中所包含的信息來獲得下一步操做所須要的信息,如究竟是向哪一個URL發送請求等。也就是說,一個典型的REST服務不須要額外的文檔標示經過哪些URL訪問特定類型的資源,而是經過服務端返回的響應來標示到底能在該資源上執行什麼樣的操做
目的:實現客戶端無需藉助任何文檔即能調用到全部的服務器資源
3、資源的URL設計
1.經過URL來表示資源
資源分爲主資源與子資源
由於主資源是一類獨立的資源 因此主資源應直接放在相對路徑下:例如
若要表示主資源的實例:若是實例的ID=1,則這樣表示: /goods/1
子資源:
一個實例的子資源多是一個集合也多是一個單一的子資源
子資源爲圖片集合:/goods/1/pictures
子資源爲商品折扣的單子子資源:/goods/1/discount
2.單數 vs. 複數
獲取用戶1的信息,哪一種方式更符合RESTful?
/api/users/1
/api/user/1
3.相對路徑 vs. 請求參數
極光的RESTful API:
獲取用戶信息 GET /v1/users/{username} 參數放在路徑中
VS
獲取用戶信息 GET /v1/users?username=xxxxx 拼接的方式
獲取應用管理員列表 GET /v1/admins?start={start}&count={count} ?後拼接參數的方式:這種方式通常做爲過濾資源
4.使用合適的動詞 get delete put post
選擇請求接口的方式: get delete
PUT 在服務器更新資源(客戶端提供改變後的完整資源)。
POST 在服務器新建一個資源
5.使用標準的狀態碼
GET
- 204(無內容) - 資源有空表示
- 301(Moved Permanently) - 資源的URI已被更新
- 303(See Other) - 其餘(如,負載均衡)
- 304(not modified)- 資源未更改(緩存)
- 400 (bad request)- 指代壞請求(如,參數錯誤)
- 404 (not found)- 資源不存在
- 406 (not acceptable)- 服務端不支持所需表示
- 500 (internal server error)- 通用錯誤響應
- 503 (Service Unavailable)- 服務端當前沒法處理請求
-
POST
- 不安全且不冪等
- 使用服務端管理的(自動產生)的實例號建立資源
- 建立子資源
- 部分更新資源
- 若是沒有被修改,則不過更新資源(樂觀鎖)
- 201(created)- 若是新資源被建立
- 202(accepted)- 已接受處理請求但還沒有完成(異步處理)
- 301(Moved Permanently)- 資源的URI被更新
- 303(See Other)- 其餘(如,負載均衡)
- 400(bad request)- 指代壞請求
- 404 (not found)- 資源不存在
- 406 (not acceptable)- 服務端不支持所需表示
- 409 (conflict)- 通用衝突
- 412 (Precondition Failed)- 前置條件失敗(如執行條件更新時的衝突)
- 415 (unsupported media type)- 接受到的表示不受支持
- 500 (internal server error)- 通用錯誤響應
- 503 (Service Unavailable)- 服務當前沒法處理請求
PUT
- 不安全但冪等
- 用客戶端管理的實例號建立一個資源
- 經過替換的方式更新資源
- 若是未被修改,則更新資源(樂觀鎖)
- 201 (created)- 若是新資源被建立
- 301(Moved Permanently)- 資源的URI已更改
- 303 (See Other)- 其餘(如,負載均衡)
- 400 (bad request)- 指代壞請求
- 404 (not found)- 資源不存在
- 406 (not acceptable)- 服務端不支持所需表示
- 409 (conflict)- 通用衝突
- 412 (Precondition Failed)- 前置條件失敗(如執行條件更新時的衝突)
- 415 (unsupported media type)- 接受到的表示不受支持
- 500 (internal server error)- 通用錯誤響應
- 503 (Service Unavailable)- 服務當前沒法處理請求
DELETE
- 301 (Moved Permanently)- 資源的URI已更改
- 303 (See Other)- 其餘,如負載均衡
- 400 (bad request)- 指代壞請求
- 404 (not found)- 資源不存在
- 409 (conflict)- 通用衝突
- 500 (internal server error)- 通用錯誤響應
- 503 (Service Unavailable)- 服務端當前沒法處理請求
-
6.選擇適當的表示結構
json xml
7. 版本控制
例如: