resuful接口的幾種類型、put和post有什么區別?


這兩個方法咋一看都可以更新資源,但是有本質區別的

具體定義可以百度,我這里就不貼了,光說我自己的理解

首先解釋冪等,冪等是數學的一個用語,對於單個輸入或者無輸入的運算方法,如果每次都是同樣的結果,則稱其是冪等的

對於兩個參數,如果傳入值相等,結果也等於每個傳入值,則稱其為冪等的,如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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM