1

I am implementing a PATCH method on a dropwizard REST resource. Currently only a subset of the properties of the resource an be patched. And currently only the replace operation can be fulfilled.

Which HTTP code should I return if I see a PATCH request for a property/path that is not suppported? And what should I return if the unsupported add or remove operations are requested?

4

2 回答 2

6

如果我看到对PATCH不受支持的属性/路径的请求,我应该返回哪个 HTTP 代码?

在这种情况下,服务器应返回405以指示目标资源不支持 HTTP 方法。除了状态码,服务器必须返回一个Allow标头,列出该资源支持的方法:

6.5.5。405 方法不允许

( 405Method Not Allowed) 状态码表示请求行中接收的方法是源服务器已知的,但目标资源不支持。源服务器必须 在包含目标资源当前支持的方法列表的响应中生成一个Allow头字段。405


如果请求不支持addremove操作,我应该返回什么?

我假设您的意思是JSON Patchadd中的remove操作,这是一个 JSON 文档,描述了应用于 JSON 文档的一系列操作,并且适合与HTTP 方法一起使用。PATCH

因此,请查看RFC 5789的错误处理部分,该文档定义了HTTP 方法。PATCH

您的问题中描述的情况,实际上是由于语义原因无法被服务器处理的实体。422根据RFC 5789 ,这是一个合理的选择:

无法处理的请求:422当服务器理解补丁文档并且补丁文档的语法似乎有效但服务器无法处理请求时, 可以使用(Unprocessable Entity)响应指定。这可能包括尝试以导致资源无效的方式修改资源;例如,对格式良好的 XML 文档的修改将导致其不再是格式良好的。[...]

还要记住同一文档中的以下建议:

错误响应的实体主体应该包含足够的信息来将错误的性质传达给客户端。响应实体的内容类型可能因实现而异。

RFC 7807定义了可用于报告 HTTP API 问题的文档格式。

于 2018-10-19T12:15:54.553 回答
1

我的投票是 405:

405 方法不允许

请求的资源不支持请求方法;例如,表单上的 GET 请求需要通过 POST 呈现数据,或只读资源上的 PUT 请求。

再加上 Cassio 提出的关于提供足够信息来描述错误的建议。

于 2018-10-19T13:57:03.127 回答