用于不存在的资源上的GET的REST标准

时间:2009-10-07 18:57:43

标签: rest

资源/用户/ 12345不存在。让我们说消费者正在随机尝试不同的ID。没有授权。任何用户都可以查看任何用户。从更广泛的意义上讲,我的问题是“如果你对不存在的资源进行GET,你应该返回什么?”

我应该为空用户返回不存在的ID,还是应该返回包含正确状态代码的错误消息?

典型/通常/推荐的做法是什么?

9 个答案:

答案 0 :(得分:21)

返回404状态代码。

答案 1 :(得分:11)

这取决于您的安全问题。如果guesser确定该用户ID是否存在,我会发送404,或者对/ user下的任何资源进行未经身份验证的访问的所有尝试都发送401

答案 2 :(得分:6)

<强> 404

也就是说,这假设您首先检查了授权到该操作 - &gt; / user / [id]如果用户不允许访问其他用户帐户,则返回 401

永远不要依赖用户不知道用户ID ...

答案 3 :(得分:5)

@Byron是对的,返回HTTP 404.您希望利用HTTP的所有功能,其中包括响应状态代码。因此,如果存在客户端错误,则返回4xx错误代码,如果您的服务器代码存在内部问题,请返回5xx错误代码等。

Richardson和Ruby的RESTful Web Services(O'Reilly)对此进行了很好的讨论,附录中包含了所有最重要的HTTP错误代码以及何时使用它们。

答案 4 :(得分:2)

如果用户经过身份验证和授权,请返回404.如果用户未经身份验证且未经授权,请将其发送到页面以获得授权。

答案 5 :(得分:1)

GET应该只检索存在的东西。

所以我会回复404。

答案 6 :(得分:1)

这看起来像是404错误 - 资源未找到。

答案 7 :(得分:0)

从原始问题开始,未经授权,这显然是404.如果您要添加授权,那么为所有未经授权的请求返回404实际上是可以接受的;这可以通过区分401或403(存在但未经授权)与404(不存在)来防止随机ID猜测,正如其他一些答案所暗示的那样。根据{{​​3}}:

  

10.4.5 404 Not Found ...此状态代码通常在服务器上使用   不希望透露具体原因   请求已被拒绝,或何时被拒绝   没有其他回应适用。

答案 8 :(得分:-1)

我的意见:回归空200。

坦率地说,如果REST资源不存在,它就不存在了。这意味着返回404.但是,在您的情况下,12345是您用于标识/查找返回实体的参数。资源/用户/ {userId}确实存在,所以从技术上讲,我不认为返回404是正确的,尽管很明显看到任何一方的论据。

如果您想返回两个状态代码以某种方式暴露您的系统,我会说坚持空200 OK。