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

Cha*_*des 18 api rest error-handling query-string

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

我将用一个具体的例子来说明我的意思:说,我在/ api/contacts/endpoint上有一个API处理程序,并且处理程序提供了一个名为querystring的过滤器id,它使客户能够使用提供的ID选择某些联系人.

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

显然,没有联系方式id=lalalala.在这种情况下,服务器应该是什么样的?

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

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

提前致谢.

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

Rav*_*att 15

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

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

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

编辑基于以下评论

同意你的评论.理想情况下,a 400是请求的问题.顺便说一句,你可以用一个422 Unprocessable Entity.请查看下面的stackoverflow链接,它会谈到同样的事情.

我猜想,在世界各地的开发人员会比较舒服看到400不是422这样的逻辑错误是由于一个事实,即大公司使用400,而不是422.

参考: Http状态代码, 400表示逻辑错误与格式错误的请求


Dar*_*ler 10

根据法律规定,答复应为404未找到.但是,如果你愿意返回400,那么没有人会对你太不满 - 这是一个糟糕的要求.

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