我已经经历过这个 How best to design a REST API with multiple filters?
当您说3或4个过滤条件并且您可以在查询字符串中容纳它时,这会有所帮助。
但是我们以这个例子为例 您希望在某个开始日期和结束日期之间获取有关20个电话号码的电话详细信息。 现在我同意理想情况下应该建议对每个号码进行单独查询,然后在客户端整理所有数据。
但是对于某些Live系统而言,这意味着在交换机或cdr数据库上进行20轮查询。这是20个请求 - 响应周期加上客户端必须根据时间再次整理和排序它们。在数据库级别,它可以是一个简单的单个查询,它可以返回有序数据并转换回客户端可以嵌入其系统的REST xml响应。
如果我们要使用GET,查询字符串将变得非常混乱并且也有限制。 任何解决此问题的建议。 当然,我们可以使用包含所有数字的xml发送POST请求,但这违反了REST Get原则。
答案 0 :(得分:3)
在GET的情况下使用OData查询。例如,当您的开始日期和结束日期表示为数字(unix time)时,URI可能如下所示:
GET http://operatorcalls.com/Calls/Details?$ filter = Date le 1342699200 and Date gt 1342526400
答案 1 :(得分:2)
您似乎缺少的是REST的一个重要概念,caching。作为示例,这可以在浏览器中针对单个客户端来完成。或者它可以在所有客户端和实时生产系统之间以shared cache完成(无论它是什么)。因此减少了对实时生产系统或实例交换机的查询。
您应该花一些时间阅读Fieldings thesis,并了解REST是 架构风格 。
答案 2 :(得分:1)
我在这里找到了一个解决方案Handling multiple parameters in a URI (RESTfully) in Java 但对此并不满意。 所以实际上我们最终会使用/ cdr?numbers = number1,number2,number3 ...... 但是对它不太满意,因为url中的Query String存在限制,并且似乎并不是一个优雅的解决方案。有人在他们自己的实现中找到了任何解决方案吗? 基本上不使用POST来获取这种Fetch请求,也不使用cumbresome和冗长的Query Strings。 我们正在使用Jersey,但也开放使用CXF或Spring REST