如何区分实体不存在和不正确的端点之间的404?

时间:2010-06-04 19:17:42

标签: rest

使用REST原则,404似乎用于表示实体不存在。但是,客户如何区分这种情况并完全击中不正确的端点?

我想区分,“你来到正确的端点,但那个实体不存在”和“你不在正确的端点”。从技术上讲,这可以使用其他响应代码,自定义标题等进行区分,但我主要关注此领域的REST最佳实践,以便客户尽可能简单和标准。

4 个答案:

答案 0 :(得分:3)

  

你来到了正确的终点,但是   该实体不存在

如果URL没有识别出资源,它怎么可能是正确的端点?我能想到的唯一可能的情况是该实体已被删除,在这种情况下410 Gone是正确的响应。

请记住,如果您遵循RESTful原则,那么URL应该由服务器提供,如果是,那么为什么服务器会分发无效的URL?

答案 1 :(得分:2)

我认为确定正确的端点是REST客户端的唯一责任。 (当然,可以轻松实现端点解析服务。)404错误仅表示此特定端点不承载该特定实体。

RESTful设计中没有任何内容要求服务器知道客户端是否与“正确”的主机进行交互。

答案 2 :(得分:1)

假设一个框架如下:

/ -- root
|____+
     /object
     |____+
          /members
          |____+
               /attributes
               |____+
                    /attribute_1
                    /attribute_2
                    ...
                    /attribute_n


如果你的意思是你想要能够区分有人打击 /object/members/attributes/incorrect_attribute
404 使用所有正确的命令,但尝试检索不存在的资源)
有人打/object/members/big-bird
(假设members本身不能成为有效的终点 [并且/object/members/attributes也不是有效的终点])
然后我相信您可以返回 501 错误(未实现)或 403 错误(禁止),具体取决于您想要指责的位置。 (或者, 418 (我是一个茶壶)在这里也有效。)

修改
最后,如果attribute_n 使用存在且不再存在,则可以使用 410 (资源消失)进行回复。

请参阅: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

答案 3 :(得分:0)

根据Wikipedia HTTP status codes page

400错误的请求

由于明显的客户端错误,服务器不能或不会处理请求(例如,格式错误的请求语法,大小太大,无效的请求消息框架或< em>欺骗性请求路由)

我个人坚持这一点-您(客户)提出了错误的要求,对此您应该感到难过=)