POST,PUT和PATCH的區別

2022-06-10 01:18:49 字數 1183 閱讀 9923

常用的請求方法裡面get請求和post請求我們都非常熟悉了,今天來談談post,put以及patch,在了解這些之前我們先理解乙個概念 冪等性:

冪等性:

http協議本身是一種面向資源的應用層協議,但對http協議的使用實際上存在著兩種不同的方式:

一種是restful的,它把http當成應用層協議,比較忠實地遵守了http協議的各種規定;

另一種是soa的,它並沒有完全把http當成應用層協議,而是把http協議作為了傳輸層協議,然後在http之上建立了自己的應用層協議。

get方法用於獲取資源,不應有***,所以是冪等的。比如:get 不會改變資源的狀態,不論呼叫一次還是n次都沒有***。請注意,這裡強調的是一次和n次具有相同的***,而不是每次get的結果相同。get 這個http請求可能會每次得到不同的結果,但它本身並沒有產生任何***,因而是滿足冪等性的。

delete方法用於刪除資源,有***,但它應該滿足冪等性。比如:delete 呼叫一次和n次對系統產生的***是相同的,即刪掉id為4231的帖子;因此,呼叫者可以多次呼叫或重新整理頁面而不必擔心引起錯誤。

post和put的區別容易被簡單地誤認為「post表示建立資源,put表示更新資源.但實際上兩者都可以用來建立或是更新資料.單從技術上來說,他們並沒有什麼區別.但是在http規範中post是非等冪的,多次呼叫會產生不同的結果,比如:建立乙個使用者,由於網路原因或是其他原因多建立了幾次,那麼將會有多個使用者被建立.而put id/456則會建立乙個id為456的使用者,多次呼叫還是會建立的結果是一樣的,所以put是等冪的.

patch一般是用來區域性更新資源的,假設我們有乙個userinfo,裡面有userid, username, usergender等10個字段。可你的編輯功能因為需求,在某個特別的頁面裡只能修改username,這時候的更新怎麼做?

人們通常(為徒省事)把乙個包含了修改後username的完整userinfo物件傳給後端,做完整更新。但仔細想想,這種做法感覺有點二,而且真心浪費頻寬(純技術上講,你不關心頻寬那是你土豪)。

於是patch誕生,只傳乙個username到指定資源去,表示該請求是乙個區域性更新,後端僅更新接收到的字段。

而put雖然也是更新資源,但要求前端提供的一定是乙個完整的資源物件,理論上說,如果你用了put,但卻沒有提供完整的userinfo,那麼缺了的那些字段應該被清空.另外put會有乙個create操作,加入更新的id不存在,會進行建立,而patch則沒有這個.

POST,PUT和PATCH的區別

1.get方法用於獲取資源,不應有 所以是冪等的。比如 get 不會改變資源的狀態,不論呼叫一次還是n次都沒有 請注意,這裡強調的是一次和n次具有相同的 而不是每次get的結果相同。get 這個http請求可能會每次得到不同的結果,但它本身並沒有產生任何 因而是滿足冪等性的。2.delete方法用於...

生成patch和打patch

單個檔案 diff un ori file mdf file mdf file.patch 生成patc 件 patch p0 mdf file.patch 將patch修改應用到源 patch re p0 mdf file.patch 回退patch的修改多個檔案 diff unr ori dir...

生成patch和打patch總結

git生成patch和打patch 方法1.git diff x mypatch patch p1 mypatch 方法二.單個commit git format patch 1 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7 把patch檔案拷貝到git同目錄下 ...