[HTTP状态码,当单个请求要求太大或太多资源时

问题描述 投票:21回答:2

有人知道哪种HTTP状态代码适合以下情况吗?

[匿名客户端可以使用GET /collection/?range_start=100&range_end=200从RESTful API的集合中请求一系列项目。示例查询返回一个列表,其中包含100个项目(以JSON格式)。还有一个限制,可以说300,客户可以请求多少个项目。如果客户要求例如[100,1100]范围内的1000个项目,响应状态代码应该是什么?这意味着超出限制的700个项目?

应该是400错误请求,403禁止,409冲突,416无法满足的请求范围(?)还是422无法处理的实体?您会推荐什么?

相关的问答建议409,但情况略有不同:https://stackoverflow.com/a/13463815/638546

http rest http-status-codes restful-architecture
2个回答
20
投票
10.4.4 403 Forbidden

服务器理解了请求,但拒绝执行。 授权将无济于事,不应重复该请求。 [...]

当然,将响应主体包含您拒绝请求的

原因

是个好主意。在我看来,所有其他代码都具有特定的含义,这些特性使此处的使用失去资格。

400

不太合适,因为该请求有效,并且您理解它就很好;它只是索要比您愿意一次发送的更多。

409

是不合适的,因为它与资源的“状态”特别相关。 (它适合于您链接的问题,因为在这种情况下,错误是添加到已经“完整”的集合中。但是,在您的情况下,并不是资源有问题;这是请求。)此外,

仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。

其中“重新提交”是指“重复”。在这种情况下,无论客户端做什么,该请求都是无效的。

416

专门指的是“ Range”标头,因此一律不予使用。

[417

同样指的是标头字段(在本例中为“期望”),因此也是如此。

422

是不合适的,因为它特别意味着您发送的entity在语法上是正确的,但是仍然损坏。由于GET传统上没有请求主体(没有实体),因此没有不可处理的内容。如果客户端正在发布请求,那么您可能几乎有一个案例...但是,您还必须为为什么RESTful API需要一个不更新任何内容的POST提供一个很好的案例。

((大约47%的人确定该代码在WebDAV之外也没有多大意义...但是似乎确实存在可以想到的用例。但不是这个用例。)

© www.soinside.com 2019 - 2024. All rights reserved.