RESTful API,如果查询字符串不够长,该怎么办?

时间:2017-01-19 12:03:36

标签: rest

我们有一个产品资源集合:/products

我们希望过滤此集合,仅返回具有特定class id' s列表之一的成员。例如:

GET /products?classes=100,101,102

这应返回列出任何类的产品成员集合。

我们遇到的问题是,我们正在处理数以千计的产品和类,因此id的类列表可能会长达数千个 - 对于查询字符串来说太长了。

我希望尽可能坚持使用RESTful原则,因此我喜欢使用/products?classes=100,101,102调用资源GET时返回过滤后的产品集合。

显然,我们可以在JSON格式的主体中包含id列表,但这意味着调用GET /products不会返回状态的表示资源(资源是URL),因为正在使用正文提供过滤器选项。

请求过滤的集合的最佳方法是什么,但过滤器选项太长而无法使用查询字符串..?

1 个答案:

答案 0 :(得分:0)

来自@C的有趣评论。史密斯建议使用设置为POST的{​​{1}}标头并在正文中传递X-HTTP-Method-Override来进行GET来电。这样可行。

在考虑之后我们可能会限制查询字符串中允许的类id的数量,并建议进行多次调用,将id列表分解为,200个组。提交超过200个将返回错误。

id(限于200 GET /products?classes=1004,2342,8753...

id(限于200 GET /products?classes=2326,3343,6981...

然后可以很容易地将结果拼接在一起。

这种方法可以让你使用5,000 id来做25次调用,这虽然不理想,但对我们的用例来说还是可以的。