­

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

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方法具有冪等性