Java 对于这个REST端点,404或401的合适响应是什么
例如,我有一个端点来获取用户。如果找不到用户,它将是404。 如果我要求该用户提供一些数据,但这些数据并不存在,那么它就是一个204 如果我为某个用户请求一些数据,但该用户不存在。在这种情况下,是404还是401 在我看来,这是一个404。但是考虑下面的场景…Java 对于这个REST端点,404或401的合适响应是什么,java,spring,rest,Java,Spring,Rest,例如,我有一个端点来获取用户。如果找不到用户,它将是404。 如果我要求该用户提供一些数据,但这些数据并不存在,那么它就是一个204 如果我为某个用户请求一些数据,但该用户不存在。在这种情况下,是404还是401 在我看来,这是一个404。但是考虑下面的场景… 有一个REST客户机正在向REST服务器发出请求。REST服务器(使用spring security)尝试首先加载用户,但由于系统中不存在该用户,因此加载失败。因为spring安全性看到UserNameNotFound异常,所以抛出401
有一个REST客户机正在向REST服务器发出请求。REST服务器(使用spring security)尝试首先加载用户,但由于系统中不存在该用户,因此加载失败。因为spring安全性看到UserNameNotFound异常,所以抛出401。这似乎也是正确的。当客户端请求不存在的资源时,请使用
404
:
404
(未找到)状态代码表示源服务器
找不到目标资源的当前表示形式,或者
不愿意透露它的存在。404
状态代码
不表明这种缺乏代表性是暂时的还是永久的;如果
origin server可能通过一些可配置的方式知道 这种情况可能是永久性的。[……] 如果正在使用,请在客户端请求资源且凭据无效(身份验证问题)时使用
401
:
401
(未经授权)状态代码表示请求已被删除
未应用,因为它缺少有效的身份验证凭据
对于目标资源。生成401响应的服务器必须
发送一个WWW-Authenticate
标题字段,其中包含
至少有一个挑战适用于目标资源。[……]
有关更多详细信息,请查看HTTP/1.1协议的语义和内容的当前参考。还可以查看Racksburg的以下内容:
状态代码大致分为三类:
从这里开始:
选择
2xx
和3xx
状态代码:
选择
4xx
状态代码:
选择
5xx
状态代码:
在我看来,你不应该故意发送404。404将在调用不存在的API时使用 因此,如果抛出404,客户端会认为他们调用了错误的API,或者API不可用 若并没有数据,204是apt,204告诉您正在调用正确的API,服务器会确认它,但服务器端并没有提供响应 因此,要么没有用户,要么用户没有数据,它的状态应该是204 2XX-成功 3XX-请求已移动 4XX-请求错误
5XX-服务器错误我认为
204
不适合这种情况。带有空数组/对象的200
会更好。我有点同意@CássioMazzochiMolin,但是如果你想依靠状态而不是验证响应数据来确定它是否为空,204是最好的选择。