RESTful 個人理解總結


一.什么是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訪問特定類型的資源,而是通過服務端返回的響應來標示到底能在該資源上執行什么樣的操作
 
目的:實現客戶端無需借助任何文檔即能調用到所有的服務器資源
 
 
三、資源的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

  • 安全且冪等
  • 獲取表示
  • 變更時獲取表示(緩存)
  • 200(OK) - 表示已在響應中發出
  • 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

    • 不安全且不冪等
    • 使用服務端管理的(自動產生)的實例號創建資源
    • 創建子資源
    • 部分更新資源
    • 如果沒有被修改,則不過更新資源(樂觀鎖)
    • 200(OK)- 如果現有資源已被更改
    • 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

    • 不安全但冪等
    • 用客戶端管理的實例號創建一個資源
    • 通過替換的方式更新資源
    • 如果未被修改,則更新資源(樂觀鎖)
    • 200 (OK)- 如果已存在資源被更改
    • 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

    • 不安全但冪等
    • 刪除資源
    • 200 (OK)- 資源已被刪除
    • 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. 版本控制
    例如:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM