這兩個方法咋一看都可以更新資源,但是有本質區別的
具體定義可以百度,我這里就不貼了,光說我自己的理解
首先解釋冪等,冪等是數學的一個用語,對於單個輸入或者無輸入的運算方法,如果每次都是同樣的結果,則稱其是冪等的
對於兩個參數,如果傳入值相等,結果也等於每個傳入值,則稱其為冪等的,如min(a,b)
POST
用於提交請求,可以更新或者創建資源,是非冪等的
舉個例子,在我們的支付系統中,一個api的功能是創建收款金額二維碼,它和金額相關,每個用戶可以有多個二維碼,如果連續調用則會創建新的二維碼,這個時候就用POST
PUT
用於向指定的URI傳送更新資源,是冪等的
還是那個例子,用戶的賬戶二維碼只和用戶關聯,而且是一一對應的關系,此時這個api就可以用PUT,因為每次調用它,都將刷新用戶賬戶二維碼
比如一個接口用於用戶生成,接收的數據是用戶名、密碼等相關信息,則用POST
RESTful建議所有的URI都是對應資源,所以創建用戶不應該理解為一個行為,在此將此接口命名為:
/user/creation
每次調用它都會新建一個用戶(假定用戶名可以重復)
而PUT方法更加關心一個具體資源對應的URI,比如更新當前用戶信息,這里可以用PUT
/user/me/update
這里用me來指代當前用戶,如果是針對更多用戶適用的接口,可以考慮
/user/{uid}/update
注意多次調用同一接口,只要提交的數據一致,用戶信息每次結果就會一致,即產生同樣的結果:服務器端某個具體的資源得到了更新
當需要以更新的形式來修改某一具體資源的時候,如何判斷用PUT還是POST呢?
很簡單,如果該更新對應的URI多次調用的結果一致,則PUT
比如更新某個blog文章,因為該文章具有單一的具體URI,所以每次更新提交相同的內容,結果都一致
/blog/{document_id}/update
在每次更新提交相同的內容,最終的結果不一致的時候,用POST
舉個很常見的例子,一個接口的功能是將當前余額減一個值,每次提交指定該值為100,接口如下
/amount/deduction
調用一次,你的余額-100,調用兩次,余額-200
這個時候就用POST