我正在实现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应该返回错误(如果是,那么)?或者忽略无效的过滤条目,只过滤正确的查询字符串参数?
答案 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 codes和 400 for logical error vs malformed request
答案 1 :(得分:10)
根据法律规定,答复应为404未找到。但是,如果你愿意返回400,那么没有人会对你太不满意。
我肯定会返回4XX状态代码。您希望客户知道他们犯了错误。