2

我已经完成了 如何最好地设计具有多个过滤器的 REST API?

当您说 3 或 4 个过滤条件并且您可以在查询字符串中容纳它时,这确实会有所帮助。

但是,让我们以这个例子为例,您想获取有关 20 个电话号码的通话详细信息,在某个开始日期和结束日期之间。现在我确实同意理想情况下应该建议对每个数字进行单独查询,然后在客户端整理所有数据。

但是对于某些 Live 系统,这意味着在交换机或 cdr 数据库上进行 20 轮查询。那是 20 个请求-响应周期加上客户必须根据时间再次整理和订购它们。而在数据库级别,这将是一个简单的单个查询,可以返回有序数据并转换回客户端可以嵌入到其系统中的 REST xml 响应。

如果我们要使用 GET 查询字符串会变得非常混乱并且也有限制。解决此问题的任何建议。当然,我们可以发送一个包含所有数字的 xml 的 POST 请求,但这违反了 REST Get 原则。

4

3 回答 3

3

如果是 GET,请使用 OData 查询。例如,当您的开始日期和结束日期表示为数字(unix 时间)时,URI 可能如下所示:

GET http://operatorcalls.com/Calls/Details ?$filter=Date le 1342699200 和 Date gt 1342526400

于 2012-07-19T12:55:32.743 回答
2

您似乎缺少的是 REST 的一个重要概念,即缓存。例如,这可以在浏览器中为单个客户端完成。或者它可以作为所有客户端和实时生产系统之间的共享缓存来完成(无论它是什么)。从而减少对实时生产系统的查询,或者在您的示例中,实际交换机。

您真的应该花一些时间阅读Fieldings 的论文,并了解 REST 是一种架构风格

于 2012-07-19T13:23:41.523 回答
1

我在这里找到了一个解决方案,在 Java 中处理 URI (RESTfully) 中的多个参数, 但对它不太满意。所以实际上我们最终会使用 /cdr?numbers=number1,number2,number3 ... 但是不太满意,因为 url 中的查询字符串有限制,而且似乎也不是一个优雅的解决方案. 有人在自己的实现中找到了解决方案吗?基本上不使用 POST 处理这种 Fetch 请求,也不使用繁琐冗长的查询字符串。我们正在使用 Jersey,但也可以使用 CXF 或 Spring REST

于 2012-07-22T08:37:03.400 回答