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

时间:2018-03-29 12:12:40

标签: rest http-status-codes content-expiration

假设我们有一个在线商店并收到更新某些订单的有效请求。

请求本身是有效的,但我们要说订单有一个到期时间,并且它已经过期,所以这个请求实际上是不可处理的。

我怀疑它是否是一种验证错误。因为,正如我上面所说,请求本身是有效的;并且请求发件人可能不知道该订单已经过期。

REST API服务为这种情况返回的适当HTTP状态代码是什么?

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

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

4 个答案:

答案 0 :(得分:4)

我自己的版本:

我认为对于这种情况,410 status code是最合适的:

  

410响应主要用于协助网络任务   通过通知收件人资源为
来进行维护   故意不可用,服务器所有者希望这样   将删除该资源的远程链接。这样的事件很常见   限时,促销服务和属于的资源   个人不再与原始服务器的站点相关联。它
  没有必要将所有永久不可用的资源标记为
  “消失”或保留任何时间长度的标记 - 留待到   服务器所有者的自由裁量权。

https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  

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

答案 1 :(得分:1)

使用410 Gone

  

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

答案 2 :(得分:1)

我会说400410更合适。

IMO 410 (Gone)不适合,因为资源没有不见了。它仍然存在,只是处于最终状态(在这种情况下为expired)。

400表示BadRequest。根据我的解释,尝试UPDATE不可更新的内容(尝试更新expired项)是BadRequest

我相信400不仅适用于格式错误的请求,而且适用于不符合内部业务逻辑验证的请求(在这种情况下,不更新expired项是内部的业务逻辑)。

答案 3 :(得分:-1)

我会选择其中一种: 400 - 不好的请求 410 - 走了

来自:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes