如何防止移动 REST API 结果集中的分页数据



我正在尝试实现一个 REST API 端点,该端点将返回一组实体,可以选择使用各种查询参数进行过滤。由于结果集可能很大,因此终结点还将支持使用limitoffset查询参数进行分页。

实现似乎非常简单,除了在一系列分页请求期间修改合格实体的情况,在这种情况下,某些实体可能会对客户端不可见。

下面是演示该问题的示例。

假设有一个终结点返回发票实体,可以选择按其付款状态进行筛选。我们发出未付发票请求,该请求自然可能会返回 15 个匹配项,但由于每个响应仅限于 5 个实体,因此第一个响应将包含发票 1、2、3、4 和 5。

理论上,第二个请求将检索相同结果集的发票 6、7、8、9 和 10。但是,假设发票 3 在发出第二个请求之前已付款。这将导致结果集移动,以便结果的第一页包含发票 1、2、4、5 和 6。在此方案中,第二个请求将检索发票 7、8、9、10 和 11。结果是发票 6 永远不会被客户看到。

我不担心发票 3 在请求序列结束之前(在客户端上(过时,因为这是数据更改的自然结果。但是,我担心客户永远不会知道发票 6 的存在,即使它在整个请求序列中一直未付款。

在我看来,出现此问题是因为 REST API 是无状态的。如果服务器可以在第一个请求期间对结果集进行快照,并在后续请求期间重新使用快照,则不会出现此问题。但是由于这不是REST的工作方式,我想知道是否有一种设计模式可以解决这个问题?

通常项目是按某些东西排序的,让我们按标题假设。然后,你可以用previousTitle替换偏移量,并让API返回它后面的所有(最多limit(项。

最新更新