REST API框架。无效的querystring参数的推荐行为

时间:2012-03-27 11:21:21

标签: api rest error-handling query-string

我正在实现REST API框架,我想知道当客户端提交无效的查询字符串参数时推荐行为是什么。

我将通过一个具体的例子说明我的意思: 比如说,我在/ api / contacts / endpoint上有一个API处理程序,处理程序提供了一个名为id的查询字符串过滤器,它允许客户端选择具有提供的ID的某些联系人。

因此,GET或DELETE请求可以是/api/contacts/?id=2&id=4&id=lalalala

显然,没有与id=lalalala联系的事情。在这种情况下,服务器应该是什么样的行为?

  • 忽略与id=lalalala无效的联系人,仅过滤有效ID上的联系人,2和4.

  • 回复指示此错误的错误代码。如果是,应提供哪个错误代码?

提前致谢。

编辑:澄清;我开发的框架的主要焦点是具有可预测的行为,因此具有响应代码。出于这个原因,我希望客户端使用基于此框架构建的API,以期获得最少的意外。 所以,问题基本上是:在这种情况下API应该返回错误(如果是,那么)?或者忽略无效的过滤条目,只过滤正确的查询字符串参数?

2 个答案:

答案 0 :(得分:13)

由于这是一个REST调用,我们讨论的是资源。每当我们有一个错误的过滤器,我们应该返回一个正确的错误代码。

在这种情况下,我会找到400 - bad request找到资源并正确映射(/api/contacts),但query string部分存在问题。因此,400而不是404

如果有人请求404或某些不存在的资源,则会返回/api/contacts-all

根据以下评论进行编辑

同意你的评论。理想情况下,400是请求的问题。除此之外,您可以使用422 Unprocessable Entity。请查看下面的stackoverflow链接,它会谈到同样的事情。

我猜想全世界的开发人员会因为大公司使用400而不是{{422而因此类逻辑错误而更容易看到400而不是422 1}}。

参考文献: Http status codes400 for logical error vs malformed request

答案 1 :(得分:10)

根据法律规定,答复应为404未找到。但是,如果你愿意返回400,那么没有人会对你太不满意。

我肯定会返回4XX状态代码。您希望客户知道他们犯了错误。