使用REST原则,404似乎用于表示实体不存在。但是,客户如何区分这种情况并完全击中不正确的端点?
我想区分,“你来到正确的端点,但那个实体不存在”和“你不在正确的端点”。从技术上讲,这可以使用其他响应代码,自定义标题等进行区分,但我主要关注此领域的REST最佳实践,以便客户尽可能简单和标准。
答案 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 (资源消失)进行回复。
答案 3 :(得分:0)
根据Wikipedia HTTP status codes page
400错误的请求
由于明显的客户端错误,服务器不能或不会处理请求(例如,格式错误的请求语法,大小太大,无效的请求消息框架或< em>欺骗性请求路由)
我个人坚持这一点-您(客户)提出了错误的要求,对此您应该感到难过=)