5

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

请求本身是有效的,但是假设订单有过期时间,而且已经过期了,所以这个请求实际上是无法处理的。

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

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

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

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

4

4 回答 4

7

我自己的版本:

我认为对于这种情况,410状态码是最合适的:

410 响应的主要目的是
通过通知接收者该资源
故意不可用并且服务器所有者希望
删除到该资源的远程链接来协助 Web 维护任务。
对于限时促销服务和属于不再与源服务器站点相关联的个人的资源,此类事件很常见。
不必将所有永久不可用的资源标记为“
已消失”或将标记保留任意时间——这
由服务器所有者自行决定。

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

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

于 2018-03-29T12:17:32.360 回答
1

使用410 Gone.

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

于 2018-03-29T12:18:33.050 回答
1

我会选择以下之一: 400 - 错误请求 410 - 消失

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

于 2018-03-29T12:19:20.107 回答
1

我会说这400比 更适合410

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

400表示 BadRequest。根据我的解释,尝试UPDATE一些不可更新(尝试更新expired项目)的东西是BadRequest.

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

于 2020-04-15T07:28:14.717 回答