這兩個方法看起來都是講一個資源附加到伺服器端的請求,但其實是不一樣的。一些狹窄的意見認為,POST方法用來建立資源,而PUT方法則用來更新資源。這個說法本身沒有問題,但是並沒有從根本上解釋了二者的區別。事實上,它們最根本的區別就是:POST方法不是冪等的,而PUT方法則有冪等性。那這又衍生出一個問題,什麼是冪等?

冪等(idempotent、idempotence)是一個抽象代數的概念。在計算機中,可以這麼理解,一個冪等操作的特點就是其任意多次執行所產生的影響均與依次一次執行的影響相同。

POST在請求的時候,伺服器會每次都建立一個檔案,但是在PUT方法的時候只是簡單地更新,而不是去重新建立。因此PUT是冪等的。

舉一個簡單的例子,假如有一個部落格系統提供一個Web API,模式是這樣http://superblogging/blogs/post/{blog-name},很簡單,將{blog-name}替換為我們的blog名字,往這個URI傳送一個HTTP PUT或者POST請求,HTTP的body部分就是博文,這是一個很簡單的REST API例子。我們應該用PUT方法還是POST方法?取決於這個REST服務的行為是否是idempotent的,假如我們傳送兩個http://superblogging/blogs/post/Sample請求,伺服器端是什麼樣的行為?如果產生了兩個部落格帖子,那就說明這個服務不是idempotent的,因為多次使用產生了副作用了嘛;如果後一個請求把第一個請求覆蓋掉了,那這個服務就是idempotent的。前一種情況,應該使用POST方法,後一種情況,應該使用PUT方法。