REST标准再上一个资源不存在(REST standard for GET on a resourc

2019-08-17 11:00发布

资源/用户/ 12345不存在。 比方说消费者是随机尝试不同的ID。 没有授权。 任何用户可以查看任何用户。 在更广泛的意义上说,我的问题是:“如果你做了一个不存在的资源的GET,你应该怎么回去呢?”

我应该返回一个空的用户不存在或我应该返回适​​当的状态码的错误消息的ID?

什么是典型的/一般/推荐的做法?

Answer 1:

这取决于你的安全问题事关一点点。 我要么送404,如果它是OK的猜测者发现,如果该用户ID不存在,或在/用户发送401对未经验证的所有访问企图的任何资源



Answer 2:

返回404状态码。



Answer 3:

404

这就是说,这是假定您首先检查授权该操作- > /用户/ [ID]如果用户是不允许访问其他用户帐户,你将返回401。

千万不要依赖于用户不知道用户ID ...



Answer 4:

@Byron是正确的,返回HTTP 404你想利用所有的HTTP的功能,这其中就包括响应状态码。 所以,如果有一个客户端错误,返回4xx错误代码,如果你的服务器代码有内部问题,返回5xx错误代码等。

理查森和Ruby的REST Web服务 (O'Reilly出版)有一个很好的讨论,并与所有的最重要的HTTP错误代码的附件以及何时使用它们。



Answer 5:

如果用户认证和授权,返回404。如果用户未认证和授权,把他们送到获得授权的页面。



Answer 6:

一个GET应该只取回的东西存在。

因此,我将返回404。



Answer 7:

这看起来像一个404错误,我 - 资源未找到。



Answer 8:

从你原来的问题,没有授权,这显然是一个404如果要添加授权,那么它实际上可以接受的回报所有未经授权的请求404; 这防止404(不存在的)随机ID通过区分401或403猜测(存在,但未经授权的)的一些其他的答案的建议。 按照RFC :

10.4.5 404没有找到,这个状态码是常用的,当服务器不希望透露究竟为什么请求被拒绝,或在没有其他反应是适用的。



Answer 9:

我的看法:返回一个空200。

坦率地说,如果一个REST资源不存在,它不存在。 这意味着回404在您的情况,但是,12345是您正在使用识别/查找返回实体的参数。 资源/用户/ {} userId的实际上不存在的,所以理论上讲,我不相信这是正确的返回了404,虽然它很清楚的看到任何一方的说法。

如果你觉得好像回到两个状态码暴露你以某种方式系统,但是,我会说有一个空的200 OK棒。



文章来源: REST standard for GET on a resource that doesn't exist
标签: rest