在 REST API 中,使用 URI 查询参数处理集合的排序、过滤和分页被认为是一种很好的做法,例如:
GET /employees?offset=30&limit=15&name=Mary&sort=-surname
Run Code Online (Sandbox Code Playgroud)
不幸的是,在某些“高级”情况下,参数的数量可能会“爆炸”,因此该解决方案不再可行。
回到前面的例子,假设我们想对许多其他字段应用一些更复杂的过滤器(例如:地址包含“NY”,年龄 > 30,年龄 <= 40,(婚姻状况是“已婚” AND 工资<100000USD ) 或(婚姻状况为“离婚”且薪水>=100000USD),以及许多其他……)。
显然,在这种情况下,一组简单的查询参数是不合适的。
这种情况应该如何设计?也许客户端应该发送包含一些表示查询的结构化数据的 POST?关于如何设计此类查询,是否存在或多或少的标准协议?
谢谢!
一种方法是使搜索过滤器成为 REST 资源,这意味着创建新的 REST 方法:
/filters,期望带有过滤器的正文,例如(marital status is "married" AND salary<100000USD) OR (marital status is "divorced" AND salary>=100000USD)返回此搜索的唯一 ID,以及(避免往返服务器)第一个结果,以及指向下一个结果的链接/filters/<id>/<offset>搜索结果idoffset| 归档时间: |
|
| 查看次数: |
3861 次 |
| 最近记录: |