Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于这个REST端点,404或401的合适响应是什么_Java_Spring_Rest - Fatal编程技术网

Java 对于这个REST端点,404或401的合适响应是什么

Java 对于这个REST端点,404或401的合适响应是什么,java,spring,rest,Java,Spring,Rest,例如,我有一个端点来获取用户。如果找不到用户,它将是404。 如果我要求该用户提供一些数据,但这些数据并不存在,那么它就是一个204 如果我为某个用户请求一些数据,但该用户不存在。在这种情况下,是404还是401 在我看来,这是一个404。但是考虑下面的场景… 有一个REST客户机正在向REST服务器发出请求。REST服务器(使用spring security)尝试首先加载用户,但由于系统中不存在该用户,因此加载失败。因为spring安全性看到UserNameNotFound异常,所以抛出401

例如,我有一个端点来获取用户。如果找不到用户,它将是404。 如果我要求该用户提供一些数据,但这些数据并不存在,那么它就是一个204

如果我为某个用户请求一些数据,但该用户不存在。在这种情况下,是404还是401

在我看来,这是一个404。但是考虑下面的场景…


有一个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是最好的选择。