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

时间:2013-03-03 23:59:57

标签: http rest http-status-codes restful-architecture

对于以下情况,有人知道哪个HTTP状态代码是正确的吗?

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

应该是400 Bad Request,403 Forbidden,409 Conflict,416 Requested Range不满足(?)还是422不可处理的实体?你会推荐什么?

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

2 个答案:

答案 0 :(得分:19)

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

  

10.4.4 403 Forbidden

     

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

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

在我看来,所有其他代码都具有特定的含义,使其无法在此使用。

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

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

  

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

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

416 特指“范围”标题,因此它完全不存在。

417 同样指的是一个标题字段(在本例中为“Expect”),所以同样也是如此。

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

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

答案 1 :(得分:-1)

这应始终产生400系列客户端错误。确切地说,哪个错误是由API / CGI开发人员选择的。我期待405,406,416或'全能'417. api开发人员可以控制这些错误消息的文本(正文)以包含更多有用的信息。

相关问题