单个请求请求太大资源或太多资源时的HTTP状态代码

Aks*_*lén 18 rest http http-status-codes restful-architecture

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

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

应该是400 Bad Request,403 Forbidden,409 Conflict,416 Requested Range不满足(?)还是422 Unprocessable Entity?你会推荐什么?

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

cHa*_*Hao 19

403听起来是最合适的选择.它基本上是说"nu-uh.你不会看到它.",这就是这里的情况.

10.4.4 403禁止

服务器理解请求,但拒绝履行请求. 授权无效,请求不应重复.[...]

当然,回复机构最好包括拒绝请求的原因.

在我看来,所有其他代码都具有特定含义,不符合其在此使用的资格.

400是不合适的,因为请求是有效的,你理解它就好了; 它只是要求的不仅仅是你愿意立刻发送的.

409是不合适的,因为它与资源的"状态"具体相关.(它适用于您链接的问题,因为在这种情况下,错误是添加到已经"已满"的集合.但是,在您的情况下,它不是有问题的资源;它是请求.)此外,

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

其中"重新提交"标准意味着"重复".在这种情况下,无论客户端做什么,该请求都将无效.

416具体指的是"Range"标题,所以它完全出来了.

417同样指的是标题字段(在这种情况下是"Expect"),所以它同样是out.

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

(我有47%的人确信代码在WebDAV之外也没有多大意义......但似乎有可能的用例.只是不是这个.)