在不存在的资源上获取GET的REST标准
资源/用户/ 12345不存在。假设消费者正在随机尝试不同的ID。没有授权。任何用户都可以查看任何用户。从更广泛的意义上说,我的问题是“如果您对不存在的资源执行GET,应该返回什么?”在不存在的资源上获取GET的REST标准
我应该为不存在的ID返回一个空用户吗?还是应该返回带有正确状态码的错误消息?
什么是典型/惯常/推荐的做法?
这取决于您的安全问题。我要么送404,如果它是OK的猜测者发现,如果该用户ID不存在,或在/用户
决定是401还是404,并坚持使用所有ID,无论它们是否存在。您不希望黑客通过分析哪些代码返回了哪个错误代码来找出哪些代码是值得的。 – 2009-10-07 19:11:05
@Christian Hayter:请参阅@eglasius关于检查授权的说明,首先要确定401或404是否有序。 – user359996 2011-03-06 04:39:17
返回404状态码。
GET应该只检索存在的东西。
因此,我将返回404
这看起来像一个404错误,我 - 未找到资源。
@Byron是对的,返回HTTP 404.你想利用HTTP的所有功能,这些功能包括响应状态代码。因此,如果出现客户端错误,请返回4xx错误代码,并且如果您的服务器代码存在内部问题,则返回5xx错误代码等。
Richardson和Ruby的RESTful Web Services(O'Reilly)对这个以及附录中包含所有最重要的HTTP错误代码以及何时使用它们。
发送401对未经验证的访问都尝试任何的资源,说,这假设你第一次检查授权该操作 - > /用户/ [id],如果用户不允许访问其他用户帐户,你会返回。
决不依赖于用户不知道用户ID ...
如果用户认证和授权,返回404。如果用户未认证和授权,把他们送到获得授权的页面。
从你原来的问题,没有授权,这显然是一个404。如果你要添加授权,那么它实际上是可以接受的返回404为所有未经授权的请求;这防止随机ID猜测通过区分401或403(存在,但未经授权)404s(不存在),如其他一些答案所暗示的。每RFC:
10.4.5 404没有找到,这个状态码是常用的当服务器 不希望透露究竟为什么 请求已被拒绝,或者当 没有其他响应适用。
我的看法:返回一个空200
坦率地说,如果一个REST资源不存在,它不存在。这意味着返回404.然而,在你的情况下,12345是你用来识别/查找返回实体的参数。Resource/user/{userId}实际上确实存在,所以从技术上讲,我不认为返回404是合适的,尽管很明显可以看到任何一方的论点。
但是,如果您想要返回两个状态码以某种方式公开您的系统,我会说坚持一个空的200 OK。
REST不是标准化的。 HTTP(REST依赖于)是标准化的。你的意思是“典型”还是“通常”或“推荐”? – 2009-10-07 19:13:35
我可以说我想知道所有的论点吗? – Langali 2009-10-07 19:17:03
@Erlanged:请用更多信息更新您的问题。没有“标准”,所以这将有助于澄清你的问题。请不要添加评论。请*更新*问题和标题以反映你想知道的内容。 – 2009-10-07 19:25:13