PUT 和 PATCH 請求的區別
HTTP 是一種應用程式層協議,用於在網路裝置之間傳輸資料。在 HTTP 中,可以使用多種方法。這些方法按順序表示 CRUD(建立、讀取、更新、刪除)操作。一些 HTTP 方法具有許多相同的特性。因此,在 HTTP 系統中實現這些類似的 HTTP 方法之前,我們應該仔細研究它們。例如,PUT 和 PATCH 方法的特性之間存在相似之處,可能會造成混淆。兩者都用於更新特定位置的資源。以下是它們之間的一些區別。
什麼是 PUT 請求?
PUT 是一種更新資源的技術,客戶端傳送更新整個資源的資料。客戶端使用 PUT 方法在 HTTP 伺服器上建立實體或資源。此設定過程本身可以採用兩種形式之一
更新資源
如果請求的實體尚不存在,伺服器會建立它並向客戶端返回成功程式碼 201。
如果實體已經存在,伺服器會更新實體並向客戶端返回 200 或 204 的成功程式碼。此外,如果 PUT 請求遇到問題,伺服器應該向客戶端提供相應的錯誤程式碼,通常是 4xx 或 5xx。它用於完全設定實體的資訊。
在 PUT 方法中,我們需要傳送整個資源以及需要更新的引數。
示例
如果要更新一個人的電話號碼和電子郵件,需要將所有引數以及電話號碼和電子郵件一起傳送才能更新資源。否則,整個資源將被電話號碼和電子郵件替換。
語法
PUT /html file HTTP/1.1
示例
PUT/html file HTTP/1.1 Host: example.com Content- type: text/html Content- length: 20 <p> New File </p>
響應
如果目標資源當前沒有表示,並且 PUT 請求成功建立了一個表示,則源伺服器應向用戶代理傳送 201(已建立)響應。
HTTP/1.1 201 Created Content-Location: /new.html
如果目標資源已經具有當前表示,並且該表示根據所包含表示的狀態成功更改,則源伺服器必須傳送 200(確定)或 204(無內容)響應以指示請求成功。
HTTP/1.1 204 No Content Content-Location: /existing.html
什麼是 PATCH 請求?
PATCH 方法僅部分修改資源的元素。PATCH 方法以原子方式執行請求的修改。這意味著如果伺服器無法容納所有請求的修改,則不會修改目標實體。
在這種方法中,如果請求正確執行,伺服器會向客戶端傳送成功程式碼 204。否則,伺服器將返回錯誤程式碼。客戶端需要更新的欄位只會更新,其餘欄位保持不變。
語法
PATCH /file.txt HTTP/1.1
示例
PATCH /file.txt HTTP/1.1 Host: www.example.com Content-Type: application/example If-Match: "e0023aa4e" Content-Length: 100
2xx 狀態程式碼表示成功響應。
由於響應不包含有效負載正文,因此以下示例中使用 204 響應程式碼。200 程式碼響應中可能存在有效負載正文。
響應
HTTP/1.1 204 No Content Content-Location: /file.txt ETag: "e0023aa4f"
PUT 和 PATCH 請求的區別
下表重點介紹了 PUT 和 PATCH 請求的主要區別
PUT |
PATCH |
---|---|
PUT 是一種更新資源的技術,客戶端傳送更新整個資源的資料 |
PATCH 是一種資源修改方法,客戶端傳輸更新的部分資料,而不更改完整資料 |
HTTP 的 PUT 方法是冪等的。因此,您在多次重試請求後進行的每次請求轉換都算作一個請求 |
HTTP 請求的 PATCH 方法是非冪等的。因此,如果您多次嘗試請求,最終將獲得多個資源,每個資源都有不同的 URI |
使用 PUT 請求,客戶端請求替換所包含的實體,該實體被視為儲存在原始伺服器上的資源的更改版本 |
PATCH 提供一組說明,指定如何部分修改儲存在原始伺服器上的資源以生成新版本 |
PUT 方法的頻寬較高 |
PATCH 的頻寬相對較小 |
結論
PUT 和 PATCH 都修改已存在的資料,但由於冪等性,它們以不同的方式進行。由於並非所有伺服器都接受 PATCH,因此 PUT 比 PATCH 更常用。因為它們提供編輯記錄的指令,並且是部分更新而不是像 PUT 請求那樣完全替換記錄,所以 PATCH 請求可能會導致意外結果。