REST API 设计中的高级分页、排序和过滤

Sta*_*opo 5 rest

在 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?关于如何设计此类查询,是否存在或多或少的标准协议?

谢谢!

Ada*_*ion 5

一种方法是使搜索过滤器成为 REST 资源,这意味着创建新的 REST 方法:

  • POST /filters,期望带有过滤器的正文,例如(marital status is "married" AND salary<100000USD) OR (marital status is "divorced" AND salary>=100000USD)返回此搜索的唯一 ID,以及(避免往返服务器)第一个结果,以及指向下一个结果的链接
  • GET ,返回从以下位置开始的/filters/<id>/<offset>搜索结果idoffset