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 标头
204
Allow
、Access-Control-Allow-Methods
头Accept-Patch
– 指定服务器接受的补丁文档格式- JSON Patch 生成器