纠正现有资源的HTTP状态代码,但不存在实体?

时间:2014-01-04 15:01:57

标签: http http-status-codes

假设客户端正在请求以下网址:

/user-details?user=123

如果/user-details是不存在的资源,则正确的状态代码显然是404

但是,如果/user-details确实存在,但不存在身份123的用户:

  • 我到目前为止已经返回了404 Not Found,但经验告诉我,如果不知道它是资源还是实体,会让人感到困惑没找到;
  • 我考虑使用400 Bad Request,但我发现它也很混乱,因为请求在技术上是正确的,只是请求一个不存在的实体。

是否有更合适的HTTP状态代码用于此目的?

3 个答案:

答案 0 :(得分:6)

404很好,因为用户细节资源是在这种情况下到用户实体的概念映射到部分用户资源信息。

因此,用户详细信息的GET方法不负责区分这两种情况:a)用户不存在,b)用户详细信息不存在。

然而,我会将端点重写为:

/user/123/details

在我看来,这更具表现力。

答案 1 :(得分:4)

尝试在WebDav中使用的422?见http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

对我来说404状态也可以(实际上更好的规范),400太模糊了。

答案 2 :(得分:4)

user参数是资源标识符的一部分,如RFC 3986, section 3.4中所述:

  

查询组件包含非分层数据     路径组件中的数据(第3.3节)用于识别a     URI的方案和命名权限范围内的资源

因此,404/Not found完全没问题。