rest post put_REST / HTTP方法:POST与PUT与PATCH
rest post put
每個HTTP請求都包含一個方法 (有時稱為verb ),該方法指示對標識的資源執行的操作。
在構建RESTful Web服務時,HTTP方法POST通常用于創建資源,而PUT用于資源更新。 盡管在大多數情況下這很好,但使用PUT進行資源創建也是可行的。 PATCH是資源更新的替代方法,因為它允許部分更新。
一般來說,我們可以說:
- POST請求在服務器定義的URI上創建子資源。 POST也用作常規處理操作
- PUT請求在客戶端定義的URI處創建或替換資源
- PATCH請求在客戶端定義的URI上更新資源的一部分
但是,讓我們進一步研究細節,看看如何在HTTP規范中定義這些動詞。 這里的相關部分是HTTP RFC(2616)的第9節。
開機自檢
RFC將POST的功能描述為:
POST方法用于請求源服務器接受請求中包含的實體作為請求行中Request-URI標識的資源的新下屬。
這允許客戶端創建資源而無需知道新資源的URI。 例如,我們可以向/ projects發送POST請求以創建一個新項目。 服務器現在可以將項目創建為/ project的新下屬,例如: / projects / 123 。 因此,在使用POST進行資源創建時,服務器可以確定新創建的資源的URI(通常是ID)。
服務器創建資源時,它應以201(已創建)狀態代碼和一個指向新創建資源的Location標頭進行響應。
例如:
請求:
POST /projects HTTP/ 1.1 Content-Type: application/json { "name" : "my cool project" , ... }響應:
HTTP/ 1.1 201 Created Location: https: //cool.api.com/projects/123POST不是冪等的 。 因此,多次發送相同的POST請求可能會導致創建多個資源。 根據您的需求,這可能是一個有用的功能。 如果沒有,則應該進行一些驗證,并確保僅根據某些自定義條件(例如,項目名稱必須唯一 )創建一次資源。
RFC還告訴我們:
POST方法執行的操作可能不會導致可以由URI標識的資源。 在這種情況下,適當的響應狀態是200(確定)或204(無內容),這取決于響應是否包括描述結果的實體。
這意味著POST不一定需要創建資源。 它也可以用于執行一般操作(例如,開始批處理作業,導入數據或處理某些操作)。
放
POST和PUT之間的主要區別是請求URI的含義不同。 HTTP RFC說:
POST請求中的URI標識將處理封閉實體的資源。 [..]相反,PUT請求中的URI標識請求[..]內的實體,并且服務器不得嘗試將請求應用于其他資源。
對于PUT請求,客戶端需要知道資源的確切URI。 我們無法將PUT請求發送到/ projects,并且期望在/ projects / 123處創建一個新資源。 相反,我們必須將PUT請求直接發送到/ projects / 123 。 因此,如果我們要使用PUT創建資源,則客戶端需要知道(如何生成)新資源的URI / ID。
在客戶端能夠為新資源生成資源URI / ID的情況下,PUT實際上應優先于POST。 在這些情況下,資源創建通常是冪等的 ,這是對PUT的明確提示。
可以使用PUT創建和更新資源。 因此,將PUT請求發送到/ projects / 123可能會創建項目(如果該項目不存在)或替換現有項目。 HTTP狀態代碼應用于通知客戶端資源是否已創建或更新。
HTTP RFC告訴我們:
如果創建了新資源,則原始服務器務必通過201(已創建)響應通知用戶代理。 如果修改了現有資源,則應發送200(確定)或204(無內容)響應代碼以指示請求已成功完成。
一般來說,如果確切的資源URI是已知的并且操作是冪等的 ,則PUT通常是比POST更好的選擇。 在大多數情況下,這使PUT成為更新請求的理想選擇。
但是,對于資源更新,應該記住一個怪癖。 根據RFC,PUT應該用新資源替換現有資源。 這意味著我們無法進行部分更新。 因此,如果我們要更新資源的單個字段,則必須發送包含完整資源的PUT請求。
補丁
HTTP PATCH方法在RFC 5789中定義為對前面提到的HTTP RFC的擴展。 當使用PUT替換現有資源時,使用PATCH對資源進行部分修改。
引用RFC:
使用PATCH [..],封閉的實體包含一組指令,這些指令描述了應如何修改當前駐留在原始服務器上的資源以產生新版本。 PATCH方法影響由Request-URI標識的資源,并且可能對其他資源也有副作用。
因此,類似于POST的PATCH也可能會影響請求URI所標識資源以外的資源。
通常,PATCH請求使用與應更新的資源相同的格式,而忽略了不應更改的字段。 但是,不必一定是這種方式。 也可以使用單獨的補丁格式 ,該格式描述了如何修改資源。
PATCH既不安全也不是冪等 。
也許您想知道在哪些情況下部分資源更新不是冪等的。 這里的一個簡單示例是將項目添加到現有列表資源中,例如將產品添加到購物車中。 多個(部分)更新請求可能會將產品多次添加到購物車中。
翻譯自: https://www.javacodegeeks.com/2020/02/rest-http-methods-post-vs-put-vs-patch.html
rest post put
總結
以上是生活随笔為你收集整理的rest post put_REST / HTTP方法:POST与PUT与PATCH的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不可计数的近义词 不可计数的近义词是什么
- 下一篇: 258是什么意思 数字258代表什么意思