首页/网络/协议速查/PATCH 部分修改资源
HTTP 方法与状态码91 条

PATCH 部分修改资源

对资源做局部修改的方法(RFC 5789 定义),请求体是「补丁文档」,语义由媒体类型决定。

协议速查网络更新于 2026-10-13

PATCH 是什么

补丁方法对资源做局部修改,请求体是一份「补丁文档」,具体语义由媒体类型决定:有的格式描述如何合并字段,有的格式是一组增删改操作序列。它没有出现在最初的规范里,而是后来补充定义的,因此它到底是否幂等要看补丁内容——把字段设成固定值是幂等的,而在数组末尾追加元素则不是。需要整体覆盖时应当使用替换方法,两者语义不可互换。

基本信息

名称PATCH,定义见后续补充规范
作用按补丁文档局部修改资源
幂等性不保证;取决于补丁内容
媒体类型决定补丁如何解释,必须显式声明
与替换方法区别替换是整体覆盖,补丁是局部修改

典型使用场景

  • 只改少量字段:用户资料里更新昵称或头像地址
  • 精确控制数组:按索引增删元素而不是整体替换
  • 状态机流转:只提交状态字段,避免提交必须带全量字段的接口
  • 并发编辑:配合版本校验只提交差异部分
  • 第三方部分更新:对方接口只接受差异字段的场景

补丁请求示例

补丁请求示例
curl -i -X PATCH https://api.example.com/users/101 \
  -H 'Content-Type: application/merge-patch+json' \
  -d '{"age":31}'
# 声明补丁类型很关键:用通用类型发送会被严格的接口拒绝
curl -i -X PATCH https://api.example.com/users/101 \
  -H 'Content-Type: application/json-patch+json' \
  -d '[{"op":"replace","path":"/age","value":31}]'

常见补丁格式

媒体类型用途特点
合并式补丁只给出要改的字段实现简单,数组的处理规则需自行约定
操作序列补丁按操作增删改特定路径表达能力强,客户端实现成本高
简单字段更新部分框架支持的表单式更新兼容性好,语义较弱

使用要点

  • 必须显式声明补丁媒体类型,否则严格的服务端会直接拒绝
  • 需要整体覆盖时不要用补丁去模拟,未提及的字段在两种语义下结果完全不同
  • 数组类字段尤其要明确约定:是整体替换还是追加,重复执行会给出不同结果
补丁是否幂等取决于内容:把字段设为固定值重复执行结果一致;而「在数组末尾追加一项」这类补丁重复执行会不断追加,因此不能对它做自动重试。
在需要清空字段的场景误用合并式补丁会失效:合并语义里「未提及」与「设为空」往往等价,无法表达「我要把这个字段删掉」,此时应当使用操作序列格式或换用替换方法。

易错点

  • 不声明补丁媒体类型,服务端返回无法处理的类型错误,排查时误以为是参数问题
  • 用合并式补丁表达「删除字段」,因为未提及与置空等价而无法实现
  • 对追加类补丁做自动重试,数组里出现重复元素
  • 把补丁与替换混用,未提交的字段在两种语义下被清空或被保留,行为不一致

数据来源与参考

  • RFC 5789 PATCH 方法
  • RFC 7386 JSON Merge Patch
  • RFC 6902 JSON Patch

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌