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

Ben*_*min 14 http http-status-codes

假设客户端请求以下URL:

/user-details?user=123
Run Code Online (Sandbox Code Playgroud)

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

但是,如果/user-details确实存在,但不存在具有id的用户123:

  • 到目前为止404 Not Found,我已经退回了一个,但经验告诉我,不知道它是资源还是未找到的实体令人困惑;
  • 我考虑过使用400 Bad Request,但我觉得它也很混乱,因为请求在技术上是正确的,只是请求一个不存在的实体.

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

ras*_*orp 10

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

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

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

/user/123/details
Run Code Online (Sandbox Code Playgroud)

在我看来哪个更具表现力.


小智 6

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

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


DaS*_*rer 5

RFC 3986第3.4节user所述,该参数是资源标识符的一部分:

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

因此,404/Not found完全可以。