天天看點

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通路特定類型的資源,而是通過服務端傳回的響應來标示到底能在該資源上執行什麼樣的操作

目的:實作用戶端無需借助任何文檔即能調用到所有的伺服器資源

RESTful 個人了解總結

三、資源的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. 版本控制

    例如:

    RESTful 個人了解總結