我可以通过Http Patch方法使用查询参数吗?

时间:2020-10-16 14:05:28

标签: rest

我可以在Rest API的http PATCH方法中使用查询参数,而不发送部分请求正文吗?

  1. 我想避免在发送方和接收方维护请求类的开销。

  2. 我只想更新1个字段。

2 个答案:

答案 0 :(得分:0)

答案似乎是

在RFC中(重点是我)

PATCH方法请求将在请求实体中 描述的一组更改 应用于资源...

Mozilla

请求包含正文:是

另一个有力的参考文献W3 PATCH提到了Content-Length标头的必要性。

答案 1 :(得分:0)

我可以在Rest API的http PATCH方法中使用查询参数,而不发送部分请求正文吗?

是的,但可能不是您的意思。

PATCH /a?b=c HTTP/2.0
Content-Type: application/merge-patch+json

{ "y": "z"}

是一个非常令人满意的HTTP请求。它说:“找到由“ / a?b = c”标识的文档,并按照RFC 7386的规定在该文档中应用合并补丁。

请注意:此处的“查询参数”是应将补丁应用到的文档的 identification 的一部分,而不以任何方式描述应应用的补丁。


您不应该做什么:

PATCH /a?b=c

尝试通过将“ b”更新为值“ c”来修改/a。这里的根本问题是,您正在为具有标准化含义的请求创建新的含义,因此,当有人尝试使用通用组件访问您的API时,可能会造成混淆。

在您的API仅由您控制的前端使用的情况下(例如,仅通过从Web服务器下载的Java脚本客户端调用),并且不需要使用任何中间组件(例如Web缓存),那么您可能会摆脱它。

如果您查看HTTP cache invalidation,将会发现PATCH /a?b=c不会使通过GET /a获取的缓存表示形式无效,因为目标uri不匹配。