我有一个端点以获取用户为例。如果找不到用户,那将是404。 如果我要求该用户提供一些数据并且该数据不存在则为204.
如果我要求用户提供一些数据,但该用户不存在。在这种情况下,它是404还是401?
在我看来,它是404.但请考虑以下情况...
有一个REST客户端向REST服务器发出请求。 REST服务器(使用Spring安全性)尝试首先加载用户但无法加载,因为系统中不存在用户。因为Spring安全性看到UserNameNotFound异常,所以它会抛出401.这似乎也是正确的。
答案 0 :(得分:8)
当客户端请求不存在的资源时使用404
:
404
(未找到)状态代码表示原始服务器 没有找到目标资源的当前表示或是 不愿意透露那个存在。404
状态代码可以 不表明这种缺乏代表性是暂时的还是暂时的 常驻;如果是410
(Gone)状态代码优先于404
原始服务器可能通过一些可配置的方式知道 这种情况可能是永久性的。 [...]
如果您使用HTTP authentication,请在客户端请求资源且凭据无效时使用401
(身份验证问题):
401
(未授权)状态代码表示请求有 未应用,因为它缺少有效的身份验证凭据 对于目标资源。服务器必须生成401响应 发送包含at的WWW-Authenticate
标头字段 至少一个适用于目标资源的挑战。 [...]
有关更多详细信息,请查看RFC 7231,当前的语义参考和HTTP / 1.1协议的内容。另请查看来自Racksburg的以下decision chart:
状态代码分为三大类:
从这里开始:
选择2xx
和3xx
状态代码:
选择4xx
状态代码:
选择5xx
状态代码:
答案 1 :(得分:0)
在我看来,你绝不应故意发送404.当我们调用不存在的API时,将使用404.
因此,如果您抛出404,客户端会认为他们正在调用错误的API或API不可用。
如果没有数据,204是apt,204表示您正在调用正确的API,服务器确认它,但没有响应从服务器端提供。
因此,没有用户或用户没有数据,它应该是204状态。
2XX - 成功 3XX - 请求已移动 4XX - 糟糕的请求 5XX - 服务器错误