找不到资源集合的最合适的HTTP状态是什么?

时间:2016-06-23 23:21:08

标签: rest http http-status-code-404

我们的应用程序不直接处理资源,或支持有关创建,更新,删除资源的各种HTTP谓词。我们主要使用“finder”方法返回一组资源。因此,我们可能会有/users?firstName=john但不包含/users/1的网址。

我们正在讨论的问题是,如果没有找到名字为“john”的用户,那么最合适的HTTP状态代码是什么。我的观点是应返回204表示空集合,但不返回404,因为集合本身不是资源,因此“未找到资源”不是有效响应。 RFC 3986, section 3.4说 -

  

查询组件包含非分层数据   路径组件中的数据(第3.3节)用于识别a   资源...

关于资源集合没有任何说法。

思想?

2 个答案:

答案 0 :(得分:6)

我同意404状态在这里不合适。我个人会使用200状态和空集合,因为这显然代表了一个"没有结果"响应。

答案 1 :(得分:0)

您使用的是具有过滤器的集合资源(查询参数)。对集合资源的每个请求都应该返回一个集合(可能是一个JSON数组)。

  • 如果未应用过滤器,则完整(可能已分页)的集合是资源。
  • 如果过滤器已被应用且存在匹配项,则会返回包含匹配项的集合。
  • 如果应用过滤器并且没有匹配,则会返回集合。

请注意,在所有情况下,都会返回一个collectin,而不是有一个,没有或只有一个匹配。因此,如果使用JSON,响应永远不会为空,但至少包含一个空数组。

要使用的HTTP响应标头必须为200 OK。客户端需要解析资源表示并检测它可能是空的。