什么';REST API服务为过期实体返回的适当HTTP状态代码是什么?

什么';REST API服务为过期实体返回的适当HTTP状态代码是什么?,rest,http-status-codes,content-expiration,Rest,Http Status Codes,Content Expiration,假设我们有一个网上商店,收到一个更新订单的有效请求 请求本身是有效的,但是假设订单有一个过期时间,并且已经过期,所以这个请求实际上是不可处理的 我怀疑这是否是一种验证错误。因为,如上所述,请求本身是有效的;请求发送者可能不知道订单已经过期 在这种情况下,RESTAPI服务返回什么合适的HTTP状态代码 警告:由于产品的一般要求,它应该是一些4XX错误代码 UPD:更多信息:这个假定的“订单”仍然存在,甚至已经过期。可以检索它,但无法再操作它。这就是代码404(例如)不合适的原因。我自己的版本:

假设我们有一个网上商店,收到一个更新订单的有效请求

请求本身是有效的,但是假设订单有一个过期时间,并且已经过期,所以这个请求实际上是不可处理的

我怀疑这是否是一种验证错误。因为,如上所述,请求本身是有效的;请求发送者可能不知道订单已经过期

在这种情况下,RESTAPI服务返回什么合适的HTTP状态代码

警告:由于产品的一般要求,它应该是一些
4XX
错误代码

UPD:更多信息:这个假定的“订单”仍然存在,甚至已经过期。可以检索它,但无法再操作它。这就是代码404(例如)不合适的原因。

我自己的版本:

我认为在这种情况下,最合适的做法是:

410响应主要用于协助web任务
通过通知接收者资源已关闭来进行维护
故意不可用且服务器所有者希望
无法删除指向该资源的远程链接。这样的事件很常见
用于有限的时间、促销服务和属于 不再与源服务器站点关联的个人。它
无需将所有永久不可用的资源标记为
“消失”或将标记保留任意时间长度——这由
服务器所有者的自由裁量权

:

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

使用

目标资源在源服务器上不再可用,并且这种情况可能是永久性的


我会选择其中一个: 400-请求错误 410-消失


发件人:

我想说
400
410
更合适

IMO
410(消失)
不适合,因为资源没有消失。它仍然存在,只是处于一种最终状态(在本例中为
过期状态)

400
表示请求失败。根据我的解释,尝试
更新
不可更新的内容(尝试更新
过期
项目)是一个
坏请求


我认为,
400
不仅适用于格式不正确的请求,也适用于不符合内部业务逻辑验证的请求(在这种情况下,不更新过期的
项是内部业务逻辑).

API前提条件顺序应有效,即未过期。我认为API不应返回HTTP状态码,而应返回自定义错误消息。具体取决于目标资源。您对现有购物车的请求是否由URI段标识?当订单到期时,购物车会消失吗?您的问题没有包含足够的约束条件,无法得到充分回答。您也不能将每个应用程序错误推到HTTP状态代码中,而是考虑使用一个有意义的响应体和一个通用的404/400来代替。@ CODECASTEST <代码> 404 < /C>当然是不正确的,因为资源存在并且可以被检索。它只是一个410是一个404类固醇。如果404不适用,那么410肯定也不适用。另请参见。@CodeCaster太好了,请建议您的解决方案,这正是我所建议的;-)是的,只相隔几秒钟。哪个?为什么?410:表示请求的资源不再可用,并且将不再可用。当资源已被故意删除且应清除时,应使用此选项。在收到410状态代码后,客户端不应在将来请求资源。像搜索引擎这样的客户端应该从它们的索引中删除资源。[41]大多数用例不要求客户端和搜索引擎清除资源,“404未找到”上面的评论对我来说很有意义。我不知道为什么你的答案中仍然保留着过期的2616信息,而当前RFC中410的语义解释只有一半,其中最有趣的部分保留在第二段中