0

我正在尝试实现一个 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 的工作方式,我想知道是否有解决这个问题的设计模式?

4

1 回答 1

1

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

于 2018-06-20T06:30:25.407 回答