相关疑难解决方法(0)

API分页最佳实践

我希望通过我正在构建的分页API来处理一个奇怪的边缘情况.

像许多API一样,这个API分散了很多结果.如果您查询/ foos,您将获得100个结果(即foo#1-100),以及指向/ foos?page = 2的链接,该链接应返回foo#101-200.

不幸的是,如果在API使用者进行下一次查询之前从数据集中删除了foo#10,/ foos?page = 2将偏移100并返回foos#102-201.

对于试图吸引所有泡沫的API消费者而言,这是一个问题 - 他们不会收到foo#101.

处理这个问题的最佳做法是什么?我们希望尽可能轻量级(即避免处理API请求的会话).其他API的例子将不胜感激!

rest pagination api-design

275
推荐指数
9
解决办法
15万
查看次数

构建分页光标

我有活动存储在图形数据库中.在某些情况下,多个活动被分组并聚合为1个活动.

已处理的活动Feed可能如下所示:

Activity 1

Activity 2

Grouped Activity
  Activity 3
  Activity 4

Activity 5
Run Code Online (Sandbox Code Playgroud)
  • 活动具有更新的时间戳和唯一ID.

  • 活动按其更新时间排序,如果是分组活动,则使用其子活动中的最新更新时间.

  • 活动可以插入列表中的任何位置(例如,如果我们开始关注某人,他们过去的活动将被插入到列表中).

  • 可以从列表中的任何位置删除活动.

  • 由于数据量大,使用带有微秒的时间戳仍然可能导致冲突(2个项目可以具有相同的时间戳).

  • 游标标识符应该是唯一且稳定的.添加和删​​除Feed项不应更改标识符.

我想介绍基于光标的分页,以允许客户端通过类似于twitter的 Feed分页.似乎没有太多关于它们是如何构建的信息,因为我只发现这篇博文在谈论实现它们.但是,如果光标的标识符恰好指向已删除的项目,则似乎存在问题.

有了上述内容,我如何生成一个可用作上述光标的标识符?最初,我考虑将时间戳与唯一ID组合:1371813798111111.myuniqueid.但是,如果1371813798111111.myuniqueid删除了项目,我可以获取带有1371813798111111时间戳的项目,但无法确定哪个项目应该以我应该开始的时间戳.

我的另一种方法是为每个Feed结果分配一个递增的数字.由于数字是递增的并且按顺序,如果缺少数字/ id,我可以选择下一个.但是,这样做的问题是,如果我开始在Feed中间删除并添加Feed项,则游标ID会发生变化.我遇到这个问题的一个解决方案是每个数字之间存在巨大差距,但很难确定如何以确定的方式将新项目添加到每个数字之间的空间.此外,随着新项目的增加,以及填补的空白,我们最终会遇到同样的问题.

简单地说,如果我有一个项目列表,可以在列表中的任何位置添加和删除项目,那么为每个列表项生成id的最佳方法是,如果删除了id的项目,我仍然可以确定它在列表中的位置

pagination cursor cursor-position

5
推荐指数
1
解决办法
996
查看次数

标签 统计

pagination ×2

api-design ×1

cursor ×1

cursor-position ×1

rest ×1