假设我们有一个在线商店并收到更新某些订单的有效请求。
请求本身是有效的,但我们要说订单有一个到期时间,并且它已经过期,所以这个请求实际上是不可处理的。
我怀疑它是否是一种验证错误。因为,正如我上面所说,请求本身是有效的;并且请求发件人可能不知道该订单已经过期。
REST API服务为这种情况返回的适当HTTP状态代码是什么?
警告:由于产品的一般要求,应该是4XX
个错误代码!
UPD :更多信息:这个假定的"顺序"仍然存在,甚至过期。可以检索它,但不再可以操作它。这就是代码404
(例如)不合适的原因。
答案 0 :(得分:4)
我自己的版本:
我认为对于这种情况,410
status code是最合适的:
410响应主要用于协助网络任务 通过通知收件人资源为
来进行维护 故意不可用,服务器所有者希望这样 将删除该资源的远程链接。这样的事件很常见 限时,促销服务和属于的资源 个人不再与原始服务器的站点相关联。它
没有必要将所有永久不可用的资源标记为
“消失”或保留任何时间长度的标记 - 留待到 服务器所有者的自由裁量权。
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html:
请求的资源在服务器上不再可用,没有 转发地址是已知的。预计这种情况会发生 被视为永久性具有链接编辑功能的客户端应该 用户批准后删除对Request-URI的引用。如果 服务器不知道,或无法确定,无论是否 条件是永久的,状态代码404(未找到)应该是 用来代替。除非另有说明,否则此响应是可缓存的
答案 1 :(得分:1)
使用410 Gone
。
目标资源在原始服务器上不再可用,并且这种情况可能是永久性的。
答案 2 :(得分:1)
我会说400
比410
更合适。
IMO 410 (Gone)
不适合,因为资源没有不见了。它仍然存在,只是处于最终状态(在这种情况下为expired
)。
400
表示BadRequest。根据我的解释,尝试UPDATE
不可更新的内容(尝试更新expired
项)是BadRequest
。
我相信400
不仅适用于格式错误的请求,而且适用于不符合内部业务逻辑验证的请求(在这种情况下,不更新expired
项是内部的业务逻辑)。
答案 3 :(得分:-1)
我会选择其中一种: 400 - 不好的请求 410 - 走了