PATCH 請求方法
PATCH HTTP 方法用於對資源應用區域性修改。
PATCH 在某種程度上類似於 CRUD 中“更新”的概念(通常,HTTP 與 CRUD 不同,兩者不應混淆)。
與 PUT 相比,PATCH 是一組用於修改資源的指令,而 PUT 代表對資源的完整替換。PUT 請求總是冪等的(重複多次相同的請求會使資源保持在相同的狀態),而 PATCH 請求可能並非總是冪等的。例如,如果資源包含一個自增計數器,PUT 請求會覆蓋計數器(因為它替換了整個資源),但 PATCH 請求可能不會。
與 POST 類似,PATCH 請求可能會對其他資源產生副作用。
伺服器可以透過在 Allow 或 Access-Control-Allow-Methods(用於 CORS)響應頭中新增 PATCH 來宣告支援它。另一個隱式指示支援 PATCH 的是 Accept-Patch 頭(通常在對資源執行 OPTIONS 請求後),它列出了伺服器在對資源進行 PATCH 請求時能夠理解的媒體型別。
語法
PATCH <request-target>["?"<query>] HTTP/1.1
<請求目標>-
與
Host標頭中提供的資訊結合使用時,標識請求的目標資源。這是對源伺服器的請求中的絕對路徑(例如,/path/to/file.html),以及對代理的請求中的絕對 URL(例如,http://www.example.com/path/to/file.html)。 <query>可選-
一個可選的查詢元件,前面帶有一個問號
?。通常用於以key=value對的形式攜帶識別資訊。
示例
成功修改資源
假設伺服器上有一個表示使用者(數字 ID 為 123)的資源,格式如下:
{
"firstName": "Example",
"LastName": "User",
"userId": 123,
"signupDate": "2024-09-09T21:48:58Z",
"status": "active",
"registeredDevice": {
"id": 1,
"name": "personal",
"manufacturer": {
"name": "Hardware corp"
}
}
}
PATCH 不是傳送一個 JSON 物件來完全覆蓋資源,而是隻修改資源的特定部分。此請求更新 status 欄位:
PATCH /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27
Authorization: Bearer ABC123
{
"status": "suspended"
}
PATCH 請求的解釋和身份驗證取決於具體實現。成功可以透過任何成功的響應狀態碼來指示。在此示例中,使用了 204 No Content,因為不需要傳輸包含操作額外上下文的正文。提供了 ETag,以便呼叫者將來可以執行條件請求。
HTTP/1.1 204 No Content
Content-Location: /users/123
ETag: "e0023aa4f"
規範
| 規範 |
|---|
| RFC 5789 |
瀏覽器相容性
瀏覽器不使用 PATCH 方法執行使用者發起的動作,因此“瀏覽器相容性”不適用。開發者可以使用 fetch() 設定此請求方法。
另見
- HTTP 請求方法
- HTTP 響應狀態碼
- HTTP 標頭
204Allow、Access-Control-Allow-Methods頭Accept-Patch– 指定伺服器接受的補丁文件格式- JSON Patch 生成器