POST,PUT和PATCH的區(qū)別

常用的請求方法里面GET請求和POST請求我們都非常熟悉了,今天來談?wù)凱OST,PUT以及PATCH,在了解這些之前我們先理解一個概念 冪等性:

冪等性:

HTTP協(xié)議本身是一種面向資源的應(yīng)用層協(xié)議,但對HTTP協(xié)議的使用實際上存在著兩種不同的方式:

  1. 一種是RESTful的,它把HTTP當(dāng)成應(yīng)用層協(xié)議,比較忠實地遵守了HTTP協(xié)議的各種規(guī)定;
  2. 另一種是SOA的,它并沒有完全把HTTP當(dāng)成應(yīng)用層協(xié)議,而是把HTTP協(xié)議作為了傳輸層協(xié)議,然后在HTTP之上建立了自己的應(yīng)用層協(xié)議。

GET方法用于獲取資源,不應(yīng)有副作用,所以是冪等的。比如:GET http://www.bank.com/account/123456,不會改變資源的狀態(tài),不論調(diào)用一次還是N次都沒有副作用。請注意,這里強(qiáng)調(diào)的是一次和N次具有相同的副作用,而不是每次GET的結(jié)果相同。GET http://www.news.com/latest-news這個HTTP請求可能會每次得到不同的結(jié)果,但它本身并沒有產(chǎn)生任何副作用,因而是滿足冪等性的。

DELETE方法用于刪除資源,有副作用,但它應(yīng)該滿足冪等性。比如:DELETE http://www.forum.com/article/4231,調(diào)用一次和N次對系統(tǒng)產(chǎn)生的副作用是相同的,即刪掉id為4231的帖子;因此,調(diào)用者可以多次調(diào)用或刷新頁面而不必?fù)?dān)心引起錯誤。

POST和PUT的區(qū)別容易被簡單地誤認(rèn)為“POST表示創(chuàng)建資源,PUT表示更新資源.但實際上兩者都可以用來創(chuàng)建或是更新數(shù)據(jù).單從技術(shù)上來說,他們并沒有什么區(qū)別.但是在HTTP規(guī)范中POST是非等冪的,多次調(diào)用會產(chǎn)生不同的結(jié)果,比如:創(chuàng)建一個用戶,由于網(wǎng)絡(luò)原因或是其他原因多創(chuàng)建了幾次,那么將會有多個用戶被創(chuàng)建.而PUT id/456則會創(chuàng)建一個id為456的用戶,多次調(diào)用還是會創(chuàng)建的結(jié)果是一樣的,所以PUT是等冪的.

PATCH一般是用來局部更新資源的,假設(shè)我們有一個UserInfo,里面有userId, userName, userGender等10個字段??赡愕木庉嫻δ芤驗樾枨?,在某個特別的頁面里只能修改userName,這時候的更新怎么做?

人們通常(為徒省事)把一個包含了修改后userName的完整userInfo對象傳給后端,做完整更新。但仔細(xì)想想,這種做法感覺有點二,而且真心浪費(fèi)帶寬(純技術(shù)上講,你不關(guān)心帶寬那是你土豪)。

于是PATCH誕生,只傳一個userName到指定資源去,表示該請求是一個局部更新,后端僅更新接收到的字段。

而PUT雖然也是更新資源,但要求前端提供的一定是一個完整的資源對象,理論上說,如果你用了PUT,但卻沒有提供完整的UserInfo,那么缺了的那些字段應(yīng)該被清空.另外PUT會有一個create操作,加入更新的id不存在,會進(jìn)行創(chuàng)建,而PATCH則沒有這個.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容