找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 313|回复: 0

分页、翻页Api的设计

[复制链接]

378

主题

55

回帖

2063

积分

管理员

积分
2063
发表于 2022-12-30 10:05:20 | 显示全部楼层 |阅读模式
传统分页使用pageNum 和pageSize
他有一个缺点,就是假如你在第一页,显示了5条数据,此时数据库新增了一条数据,然后你跳转到第二页的时候,会发现第二页的第一条数据会跟第一页的数据重合

无极分页/滚动分页
获取分页数据后记录最后一条数据的id,然后往下翻的时候通过这个id去查询下面的数据,每次取N条

这里有个判断问题,就是说怎么判断已经达到了最后一页,常用的方案是当接口没有数据返回的时候,就达到了最后一页
但这会有个问题,也就是说如果没有更多数据,前端也需要额外的去尝试请求才能知道这个结果

还有一种方案是获取第N+1 条数据的id作为last_tid 返回前端
如果id不为空,滚动翻页就拿这个id取请求后端,后端通过 id <= last_tid 查询数据, 同事返回N+1 条数据的tid返回
如果id为空,说明上一次的请求已经加载完所有的数据,没有更多的数据了,就不需要再请求多一次接口,因为即使请求也拿不到更多的数据了

这里我自己也提供一种思路,前端调用后端接口后获取滚动的数据内容必定是需要指定获取的数据条数的,那么前端通过判断后端返回的数据数据和我参数指定需要获取的数据条数进行比对,如果说后端返回的数据比我要求的少,那么说明已经没有更多的数据了
这是一种思路,也有缺陷,也就是说如果刚好获取的那一页都有数据,下一页就没数据这种情况的话,前端还是会多请求多一次无用的请求,还有,即使后端返回的数据条数与预期少,也不能保证后端数据的确饱和,也可能是后端出现分页bug
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2024-12-19 22:57 , Processed in 0.045028 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表