我在dropwizard REST资源上实现PATCH方法。 当前,仅修补资源属性的子集。目前,只能执行替换操作。
如果看到PATCH
对不支持的属性/路径的请求,我应该返回哪个HTTP代码?如果请求了不受支持的add
或remove
操作,我应该返回什么?
答案 0 :(得分:6)
如果看到
PATCH
对不支持的属性/路径的请求,我应该返回哪个HTTP代码?
在这种情况下,服务器应返回405
,以指示目标资源不支持HTTP方法。除了状态码之外,服务器还必须返回Allow
标头,列出该资源支持的方法:
状态
405
(不允许使用方法)表明该方法 源服务器知道请求行中收到的消息,但未知 目标资源支持。原始服务器必须生成一个Allow
响应中的405
标头字段,其中包含目标列表 资源当前支持的方法。
如果请求不受支持的
add
或remove
操作,我应该返回什么?
我假设您是指add
中的remove
和JSON Patch操作,这是一个JSON文档,它描述了要应用于JSON文档的一系列操作,适合与{ {1}} HTTP方法。
因此,请看一下error handling(定义了PATCH
HTTP方法的文档)的RFC 5789部分。
您的问题中描述的情况实际上是由于语义原因而无法由服务器处理的实体。因此,根据422
,RFC 5789是一个合理的选择:
不可处理的请求:可以用
PATCH
指定(不可处理 实体)服务器响应 了解补丁文件和补丁的语法 该文档似乎有效,但是服务器无法执行以下操作 处理请求。这可能包括尝试修改 以某种方式导致资源变得无效的资源; 例如,对格式良好的XML文档的修改, 会导致它不再格式正确。 [...]
还要牢记同一文档的以下建议:
错误响应的实体应包含足够的信息 向客户传达错误的性质。内容- 响应实体的类型可能因实现而异。
RFC 7807定义了可用于报告HTTP API中的问题的文档格式。
答案 1 :(得分:1)
我的投票将是405:
405方法不允许
请求方法不支持 要求的资源;例如,对要求以下内容的表单的GET请求 通过POST呈现的数据,或只读的PUT请求 资源。
与Cassio提出的有关提供足够的信息来描述错误的建议相辅相成。