REST API URL中的额外查询参数
在我的Rest应用程序中,资源url还支持查询参数,如pageSize,pageNum,name等。所以请求url看起来像
/资源/ {ID}?页次= 1&的pageSize = 25&DESC = “你好”
现在假设一个客户端添加一个额外的查询参数,说’lang’,我的服务器不支持
/ resource / {id}?pageNum = 1&pageSize = 25&desc =“hello”&lang =“eng” ,但我的服务器不支持任何lang参数。
什么应该是最好的设计决定
选项1:忽略额外的无效查询参数并提供请求。
选项2:向客户端抛出错误的请求消息。
感谢Advance Singla
只是忽略它。 大多数其他Web服务器会忽略它不理解的请求参数。
Google会忽略我的两个额外参数https://www.google.com/#q=search+for+something&invalid=param&more=stuff
毫无疑问,客户必须坚持使用Api文档。
但是APis中的某些变化呢(只是一个小的变化,不涉及迁移到新的API版本)
比方说,API资源:/ dummy / api / Iid1支持3个查询参数,即a,b,c
所以完整的URi:/ dummy / api / Id1?a = 1&b = 20&c = 45是API公开的有效请求,所有查询参数,即a,b,c都是可选的参数,即如果这些参数不存在在请求中,服务器将它们处理为某个默认值,如a = 0,b = 0,c = 0
在某些时候,大量客户端基于上述URL方案构建其应用程序。
现在API提供者想要废弃参数’b’并决定抛弃额外/未知参数的exception
这意味着所有客户端应用程序围绕涉及参数“b”的最后一个URL方案构建将失败!
这简单地表明,抛出额外/未知查询参数的exception总是导致客户端和服务器问题的紧密耦合,我想这完全违背了REST原则,这可能具有“完全分离客户端和服务器问题,以便两者可以分开进化’
所以我认为只有缺失/无效的’强制’参数应该抛出exception,而不是选项,永远不会。
我想忽略不良参数是标准做法,但在很多情况下我似乎完全错了。
假设我有一个小部件API,其中包含一个可以找到小部件的小部件集合端点。 窗口小部件具有foo属性,因此以下搜索foo = bar的窗口小部件
GET https://example.com/widgets?foo=bar
现在一个API客户端犯了错字。
GET https://example.com/widgets?foi=bar
而不是只返回foo = bar的小部件,而是默认忽略输入错误并返回所有小部件(适当限制为某些默认大小,因为我制作了精心设计的API)。 我的API客户端可能花费数小时试图找出她的呼叫无效的原因,或者更有可能点亮我的支持网站,想知道为什么我的API很糟糕。
返回400状态是否更好,并显示错误消息,指出“foi”不是可识别的参数? 这似乎特别正确,因为对于请求体中的同类错字,最好的行为是返回400.(例如,请参阅此答案: https : //stackoverflow.com/a/20686925/2716301 )
忽略它是常见模式,但查询参数也是URL(资源ID)的一部分,并且此类请求上的正确响应代码为404 Not Found。
没有一般的设计模式。 你必须问问自己什么是最适合你的用户。 最好告诉他们他们所要求的资源不是以他们需要的格式提供,或者只是给他们另一种资源?
注意
HTTP包含处理语言的强大机制; 请参阅Accept-Language和Content-Language标头(所有浏览器都在使用它)