Object-Service-API分页查询如何获取指定页的pageToken?
Slate Object-Service-API 分页跳页问题解答
问题背景
Slate平台启用分页功能的表格设置pageSize=10时,后端依赖Object-Service-API完成查询,接口请求体格式如下:
{ "objectSet": "objectSet.ObjectSet", "objectSetContext": "optional<ObjectSetContext>", "pageSize": "integer", "pageToken": "optional<PageToken>", "sort": "optional<list<PropertySort>>" }
已知总记录数共100条,首次查询传入"pageToken": null时,会返回前10条记录,同时响应携带的pageToken格式类似"v1.abc-some-uuid-xyz.10"。
需求为直接跳转到第5页(展示第41-50条结果),分两种场景处理:
- 持有首页查询返回的、仍在有效期内的pageToken
- 未保存pageToken,或已有pageToken已过期
Slate查询标签页配置入口参考截图:
具体处理方案
首先明确Slate OSS返回的pageToken结构固定为{版本标识}.{查询快照UUID}.{已返回记录偏移量}:
- 中间的UUID段是和本次查询条件、排序规则、查询范围绑定的唯一快照标识,在token有效期内固定不变,用来保证分页过程中数据一致性
- 后缀数字是当前已经返回的记录总数,也就是下一页查询的起始偏移位置(从0开始计数)
场景1:持有首页有效未过期pageToken
不需要逐页翻页调用接口,直接修改token的后缀偏移量即可:
第5页的起始偏移为(5-1)*10 = 40,保留首页token的版本号和快照UUID段,把后缀的.10替换为.40,最终传入的pageToken为v1.abc-some-uuid-xyz.40,即可直接精准获取第41-50条的第5页数据。
注意:构造token时必须保证本次请求的
objectSet、查询条件、sort排序参数、pageSize和生成首页token的请求完全一致,否则会触发token无效报错,或出现分页数据重复/遗漏问题。
场景2:无有效pageToken
不能随意编造快照UUID段,否则会直接返回参数错误,按以下步骤处理:
- 保持和跳页目标完全一致的查询条件、排序规则、pageSize参数,发起一次首页查询(传入
pageToken: null),拿到本次响应返回的首页pageToken - 提取该token的版本号和快照UUID段,按照场景1的规则拼接后缀
.40,得到目标pageToken传入接口,即可直接获取第5页数据 - 如果使用的是较早版本的Slate,不支持同快照下修改偏移量直接跳页,只能顺序翻页:依次用前一页返回的pageToken请求下一页,直到拿到后缀为
.40的pageToken,再请求即可得到第5页结果。该方式需要4次额外接口调用,效率较低,仅作兼容方案使用。
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

