游标分页
Cursor Pagination
高级通用游标分页(Cursor Pagination)是接口按固定顺序返回一批数据,并给出一个用于继续读取的游标。它解决列表不断新增数据时,按页码翻页容易重复或漏项的问题,比如继续加载消息记录。
你可能会说:「我想让消息列表一批批加载,新消息进来后继续往下翻,也别把刚看过的消息再显示一遍。」
动手看看消息记录继续加载
先切换读取进度,看首批消息、插入新消息,再继续加载;也可以换一种翻页方式,对照下一批的内容。
游标记住首批最后的 M103。继续读取时从它后面接上 M102、M101、M100,新插入的 M106 不会挤乱这个衔接。
要点游标分页是怎么找到下一批数据的?
- 1
先确定一套稳定的排序规则
假设你按消息发送时间倒序展示列表,两条消息可能同一时间发出,所以我们再用唯一 ID 排定先后。排序不唯一,接口就难以准确判断下一批从哪里接上。
- 2
用返回的游标继续请求数据
接口返回这一批消息时,也给你一个下一页游标。前端下次把它传回去,服务端就沿着同一排序规则继续查。游标可以封装位置等信息,前端只需保存和传回,不必解析。
- 3
筛选变化后从头开始读取
如果你从「全部消息」切到「未读消息」,旧游标对应的查询范围就变了。我们会清空旧列表和游标,重新请求第一批;接口也需要说明怎样判断已经没有下一批。
容易混淆的地方
它和页码分页都能分批取数据,但页码分页让你指定第几页,游标分页让你从上次的位置继续读。因此它适合向后加载,却不方便直接跳到第 20 页。这里的「游标」是请求下一批数据用的标记,不是屏幕上的鼠标指针。游标也不等于固定快照:已有数据若被删除或改动排序字段,仍可能影响翻页结果。
什么时候用
适合用
- 你在做聊天记录或动态流,用户不断往下加载,而列表顶部还会有新内容进入。
- 你在做订单后台的逐批浏览或导出,数据量大,用户主要关心接着读取,而不是跳到指定页。
- 你在做 AI 工具的运行日志列表,日志持续产生,界面需要按确定顺序加载更早的记录。
不适合用
- 你做的是几十条固定内容的设置列表,一次取回并展示就够了,不必增加分页接口。
- 你的报表要求用户直接跳到指定页、看到明确页码,可优先考虑页码分页。
- 你需要的是某一时刻绝不变化的完整数据集,例如结算报表;应先固定数据范围或生成快照,而不是只依赖游标分页。
练一练选一个答案,看看解释
你做一个按创建时间倒序排列的工单列表。用户看完第一批时,新工单不断产生;他点击「加载更多」后,不想重复看到旧工单。你会怎样设计接口?
让 AI 帮你做复制给 AI Agent 直接用
请把工单列表接口改为游标分页:按创建时间倒序、唯一 ID 作同时间的排序补充;返回数据、下一页游标和是否还有更多。前端加载更多时传回游标,筛选条件变化时清空列表和游标,并补充翻页测试。