02 RESTFul介面和HTTP的冪等性分析

word 發表於 2022-06-21

RESTFul介面和HTTP的冪等性分析

  • REST全稱是Representational State Transfer,中文為表述性狀態轉移,REST指的是一組架構約束條件和原則
  • RESTful表述的是資源的狀態性轉移,在Web中資源就是URI(Uniform Resource Identifier)(統一資源識別符號)
  • 如果一個架構符合REST的約束條件和原則,我們就稱它為RESTful架構,HTTP是目前與REST相關的唯一例項

RESTful介面URL命名原則

  1. HTTP方法後跟的URL必須是名詞且統一成名詞複數形式
  2. URL中不採用大小寫混合的駝峰命名,儘量採用全小寫單詞,如果需要連線多個單詞,則採用“-”連線
  3. 示例:/users、/users-fans;反例:/getUsers、/getUsersFans

HTTP方法的語義

RESTful架構應該遵循統一的介面原則,應該使用標準的HTTP方法如GET和POST,並且遵循這些方法的語義

方法 語義
GET 獲取指定資源
DELETE 刪除指定資源
POST 傳送資料給伺服器,依據HTTP 1.1規範中的描述,結合實際專案開發經驗,POST經常為了以統一的方法來涵蓋以下功能:1在公告板,新聞組,郵件列表或類似的文章組中釋出訊息2通過註冊新增使用者,3向資料處理程式提供一批資料,例如提交一個表單
PUT 使用請求中的負載建立或者替換目標資源PUT和POST的區別在於PUT是冪等的,而POST不是。冪等的含義可以理解為呼叫一次與連續呼叫多次是等價的(沒有副作用或副作用不變)

POST和PUT的區別

  • POST和PUT的區別容易被簡單地誤認為“POST表示建立資源,PUT表示更新資源”
  • 而實際上,二者均可用於建立資源,更為本質的差別是在冪等性方面

HTTP的冪等性

方法 冪等性 冪等性分析
GET 具備冪等性 用於獲取資源,沒有副作用,所以是冪等的。請注意,這裡強調的是一次和N次並不是說每次請求的結果相同,而是每次請求不會產生不同的副作用。
DELETE 具備冪等性 用於刪除資源,有副作用,但它應該滿足冪等性,呼叫一次和N次對系統產生的副作用是相同的
POST 不具備冪等性 POST所指向資源並非POST要建立的資源本身,而是POST建立資源的接收者,比如POST:/news的含義是在news新聞組這個資源分類下新建一條新的新聞,所以兩次相同的POST請求會在伺服器端建立兩份新的資源,它們是不同的。所以,POST方法不具備冪等性
PUT 具備冪等性 PUT對應的資源是要建立或更新的資源本身,語義是建立或更新,對同一資源進行多次PUT的副作用和一次PUT是相同的,因此,PUT方法具有冪等性