假设客户端正在请求以下网址:
/user-details?user=123
如果/user-details
是不存在的资源,则正确的状态代码显然是404
。
但是,如果/user-details
确实存在,但不存在身份123
的用户:
404 Not Found
,但经验告诉我,如果不知道它是资源还是实体,会让人感到困惑没找到; 400 Bad Request
,但我发现它也很混乱,因为请求在技术上是正确的,只是请求一个不存在的实体。是否有更合适的HTTP状态代码用于此目的?
答案 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
完全没问题。