Rest 如果客户机向不使用';不存在

Rest 如果客户机向不使用';不存在,rest,http,asp.net-web-api,Rest,Http,Asp.net Web Api,有时客户有过时的信息,这可能会导致他们滥发信息 DELETE theApiURL/theEntity/1234 第一次发出此请求并且一切顺利时,我们返回204 任何后续时间都不存在固有错误条件,服务器将删除标识位置的任何实体,但该实体可能不存在。因此,“删除id为1234的实体”操作成功完成 我可以返回404,因为该实体不存在 我可以返回2xx,因为请求“成功”完成。。。在这里使用205是否可以表示请求完成得很好,但用户应该刷新其内容?我觉得尝试删除不存在的内容是客户端错误。我认为404在这种

有时客户有过时的信息,这可能会导致他们滥发信息

DELETE theApiURL/theEntity/1234
第一次发出此请求并且一切顺利时,我们返回
204

任何后续时间都不存在固有错误条件,服务器将删除标识位置的任何实体,但该实体可能不存在。因此,“删除id为1234的实体”操作成功完成

我可以返回
404
,因为该实体不存在


我可以返回
2xx
,因为请求“成功”完成。。。在这里使用
205
是否可以表示请求完成得很好,但用户应该刷新其内容?

我觉得尝试删除不存在的内容是客户端错误。我认为
404
在这种情况下是不正确的,因为
DELETE
请求被找到,并且它确实工作了

对我来说有道理。该实体已被删除且已消失,应由客户端删除该链接

让我想到使用
410
的是this子句:
如果服务器不知道或没有工具来确定该条件是否是永久性的,则应使用状态代码404(未找到)。
我们可以确定并知道该实体已被删除并永远消失(除非重新使用ID).

我将返回404

除非您知道资源在某个点存在,并且希望将此告知消费者,在这种情况下410似乎是合适的。但如果不检查资源是否存在,则默认为410似乎是错误的。

根据RFC 2616:

10.4.5 404未找到

服务器未找到任何与请求URI匹配的内容。没有说明该情况是暂时的还是永久的如果服务器通过一些内部可配置的机制知道旧资源永久不可用且没有转发地址,则应使用410(Gone)状态代码。当服务器不希望确切透露请求被拒绝的原因时,通常使用此状态代码,或者当没有其他响应适用时

10.4.11 410消失

请求的资源在服务器上不再可用,并且没有已知的转发地址。预计这种情况将被视为永久性的。具有链接编辑功能的客户端应在用户批准后删除对请求URI的引用如果服务器不知道或无法确定该状况是否永久,则应使用状态代码404(未找到)。除非另有说明,否则此响应是可缓存的

410响应主要用于通过通知接收者资源故意不可用以及服务器所有者希望删除指向该资源的远程链接来协助web维护任务。此类活动在有限的时间、促销服务和不再在服务器站点工作的个人资源中很常见无需将所有永久不可用的资源标记为“已消失”,也无需将标记保留任何时间长度——这由服务器所有者自行决定


因此,在初始的
DELETE
成功后,如果服务器知道该资源曾经存在,则对该资源的任何后续请求都应返回410,否则返回404。

Right。只有当你永远不会重复使用ID时,“消失”才可以。问问自己:这在实践中重要吗?回答:没有。@JulianReschke这很重要,因为如果客户认为他们发出了虚假请求而不是“延迟”请求,那么他们的行为可能会有所不同。可能是良好规范资源的重复!因此,对于可以“取消删除”的应用程序来说,410可能永远都不合适。我们的应用程序没有这样的功能,但值得一想。