Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

HTTP Idempotent Methods

常常用到會忘記,所以紀錄一下

Idempotent

中文翻譯是「冪等」,跟這裡的場景有關的數學定義是針對一元運算的定義

「當由 X -> X 的一元運算 f,對所有在 X 內的元素 x,f(f(x)) = f(x) 為真,則 f 為冪等」

比方說,假設 f 是「對數字取絕對值」,雖然可能 x ≠ f(x),但是 f(f(x)) = f(x) 一定為真

HTTP Idempotent Method

與其對應的,HTTP 的 Idempotent Method 要符合的定義是「不論做幾次,所產生的影響跟只做一次是一樣的」

以功能的角度來講,比方說,「新增用戶」就不會是這樣的操作,因為每新增用戶一次,資料庫的內容就會多一筆。

不過「取得用戶資料」則是符合的,不論你取出幾次資料,所產生的影響和結果都會和第一次取出資料的內容一樣。

RFC 7231

根據 RFC 7231 section 4.2.2 所述:

A request method is considered "idempotent" if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request. Of the request methods defined by this specification, PUT, DELETE, and safe request methods are idempotent.

裡面提到,「PUT」和「DELETE」這兩個動作是冪等的,亦即無論操作幾次,應該結果都和操作一次是一樣的。

首先我們看看 「DELETE」,根據語意,DELETE 通常用來刪除資料。

一但第一次執行,資料被刪除之後,就無法重複刪除該資料了,所以這個動作確實是冪等的。

再來我們看到「PUT」,一般來說我們會用 PUT 處理「編輯資料」的動作,

用 POST 寫入資料

很多時候,POST 可以用來建立新資料

如果建立新資料時