对于此REST端点,404或401的适当响应是什么

时间:2016-09-22 20:09:24

标签: java spring rest

我有一个端点以获取用户为例。如果找不到用户,那将是404。 如果我要求该用户提供一些数据并且该数据不存在则为204.

如果我要求用户提供一些数据,但该用户不存在。在这种情况下,它是404还是401?

在我看来,它是404.但请考虑以下情况...

有一个REST客户端向REST服务器发出请求。 REST服务器(使用Spring安全性)尝试首先加载用户但无法加载,因为系统中不存在用户。因为Spring安全性看到UserNameNotFound异常,所以它会抛出401.这似乎也是正确的。

2 个答案:

答案 0 :(得分:8)

当客户端请求不存在的资源时使用404

  

6.5.4. 404 Not Found

     

404(未找到)状态代码表示原始服务器   没有找到目标资源的当前表示或是   不愿意透露那个存在。 404状态代码可以   不表明这种缺乏代表性是暂时的还是暂时的   常驻;如果是410(Gone)状态代码优先于404   原始服务器可能通过一些可配置的方式知道   这种情况可能是永久性的。 [...]

如果您使用HTTP authentication,请在客户端请求资源且凭据无效时使用401(身份验证问题):

  

3.1. 401 Unauthorized

     

401(未授权)状态代码表示请求有   未应用,因为它缺少有效的身份验证凭据   对于目标资源。服务器必须生成401响应   发送包含at的WWW-Authenticate标头字段   至少一个适用于目标资源的挑战。 [...]

有关更多详细信息,请查看RFC 7231,当前的语义参考和HTTP / 1.1协议的内容。另请查看来自Racksburg的以下decision chart


状态代码分为三大类:

HTTP status codes categories


从这里开始:

HTTP status codes


选择2xx3xx状态代码:

HTTP 2xx and 3xx status codes


选择4xx状态代码:

HTTP 4xx status codes


选择5xx状态代码:

HTTP 5xx status codes

答案 1 :(得分:0)

在我看来,你绝不应故意发送404.当我们调用不存在的API时,将使用404.

因此,如果您抛出404,客户端会认为他们正在调用错误的API或API不可用。

如果没有数据,204是apt,204表示您正在调用正确的API,服务器确认它,但没有响应从服务器端提供。

因此,没有用户或用户没有数据,它应该是204状态。

2XX - 成功 3XX - 请求已移动 4XX - 糟糕的请求 5XX - 服务器错误