分页第一页用0还是1_如何设计api分页
常规的分页方式
API处理分页看似简单,实际上暗藏危机。最常见的分页方式,大概是下面这样的
/users/?page=1&limit=5
//服务端返回
最理想的情况下,客户端请求第一页的5条数据,服务端如常返回,比如下图:
拿Twitter的图用一下,假设我们的数据库有10条数据,按照5条一页,正好有2页。
在理想情况下,客户端拉取数据时不会出现任何异常。但,这仅仅是正常情况,如果此时刚好有2条新数据插入。
数据库记录变为13。原来第二页的数据是[5, 4, 3, 2, 1],现在变为[7, 6, 5, 4, 3],我们再一次拿到了第一页的数据。同理,如果用户在拉取数据时正好有数据被删除,一样会出现类似的问题。
根据item_id分页
要解决此类问题,就不能使用常规的分页方式。现在,我们换一个思路,客户端拉取数据时不再传page,改为item_id,我们就把它称为max_id
/users/?max_id=5&limit=5
此时服务端就知道我们上次拉取到了item_id为5的数据,继续在它后面拉取5条, 如下图:
数据可以正常取回,不会再出现上一页中的[6,7]。好了,让我们再一次假设,此时又有8条数据插入了数据库。再一次获取数据
可以看出,再一次出现问题,我们又拿到了上一页的[10,9]。所以,我们得告诉服务端,上一次拿到哪一条数据了。所以继续增加一个since_id字段。
恩,再一次取出了正确的数据。可能你觉得一切都正常了,但还是隐藏了一个致命的缺陷。
上面的数据能正常获取,是因为数据都是一个有序的集合,如果数据无序,且从数据库取出时需要按照某个字段排序,那么一切再次打回原点:所有的分页都乱了。
如何设计分页API
可以看出,两种分页方式都存在问题。所以这两种需求都是必要的,我们需要根据不同的业务场景使用不同的分页方式。
为了不造成客户端的麻烦,我们对api的分页做了一些更改。
{
我们由服务端来决定如何分页,前端需要做的,只是把next字段直接拼接到url中,这样就可以应付各种分页情况。
总结
常规的分页方式不能应付经常变更的数据,sinceid和maxid的方式不能应付有其他排序的数据。大概就是这个样子,没有一种万能的分页方案,我们只能针对具体的业务场景去设计一个弹性的API来处理复杂的分页场景。
ps: 最初我们想到的分页方案,是直接使用item_id作为拉取数据的依据,后来看到Twitter的文章,感觉有更好的分页方案,又懒得画图,所以就直接搬Twitter分页的部分了。:)
参考链接:
Working with Timelines
分页第一页用0还是1_如何设计api分页相关推荐
- 分页第一页用0还是1_计算机用0 和1刻画文字、图片和声音
计算机用0 和1刻画文字.图片和声音 对计算机来说,所有的东西都是0和1的组合.其背后是数以亿计的晶体管在频繁跳动维持其逻辑,信息转化成01的代码形式存储和传输,以此刻画这个客观世界. 图1 漫画(来 ...
- 分页第一页用0还是1_码动未来,用0和1改变世界
原标题:码动未来,用0和1改变世界 10月24日,是每年一度的程序员节,是属于码农们的节日. 为什么是1024? 计算机存储中,1G=1024M,1M=1024Kb,1kb=1024bit,再加上10 ...
- 分页第一页用0还是1_【一点资讯】程序员节:码动未来,用0和1改变世界 www.yidianzixun.com...
10月24日,是每年一度的程序员节,是属于码农们的节日. 为什么是1024? 计算机存储中,1G=1024M,1M=1024Kb,1kb=1024bit,再加上1024为2的十次方,二进制计数基本计量 ...
- 分页第一页用0还是1_洗脸用冷水还是热水好?这些错误只要犯1个,你的脸就白洗了!...
洗脸是我们每天都要做的事情,然而,并不是所有的人都会洗,更可怕的是,很多人可能第一步就错了. 而洗脸没洗对,就意味着接下来皮肤可能出现一系列的问题,比如长痘痘.毛孔粗大.皮肤干燥或容易出油...... ...
- 分页第一页用0还是1_短视频拍摄技巧分享:教你如何从0到1学会用手机拍大片...
本文为你介绍短视频拍摄技巧.短视频拍摄方法.短视频拍摄手法.手机如何拍短视频等相关内容. 手机不仅能够满足我们日常生活的通讯.娱乐,也能够用它拍摄出具有大片效果的短视频来.短视频拍摄技巧 现在的手机有 ...
- 分页第一页用0还是1_白杨SEO:5000字从0-1拆解如何用知乎排名做精准引流和变现?...
短视频,自媒体,达人种草一站服务 大纲如下: 1.知乎排名原理解析 2.做知乎排名具体步骤 3.账号注册及定位(重要) 4.用户需求关键词挖掘 5.如何制作出一篇高质量内容?(核心) 6.被动引流注意 ...
- mvc jquery ajax分页实例,jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页...
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页 简单的两个步骤即可实现分页功能 //回调里面进行业务处理 function lo ...
- 排序后分页第一页数据和第二页数据重复问题
问题描述 数据分页时需要根据值班时间F_Start 字段倒序,即使用OrderByDescending(t => t.F_Start),经过调试发现返回的总条数records,总页数to ...
- mysql创建临时表 分页_ASP+MySQl利用临时表分页第一页数据正常,下一页往后没有数据...
具体代码如下,那位高手帮解决下: 具体代码如下,那位高手帮解决下: '初始化数据库连接 strConnection = "dsn=mydata;driver={myodbd driver}; ...
最新文章
- 进程线程002 等待链表 调度链表
- java中queue排序_Java中常见的排序算法有哪些?---选择排序
- c语言数据结构 自测卷答案,《c语言数据结构》第2章 自测卷答案
- 【渝粤题库】国家开放大学2021春3896人文英语1题目
- 把Excel中的数据转换成Sql语句
- hbuilder设置html格式,Hbuilder中如何设置格式化CSS代码为单行
- SpringBoot+Vue实现前后端分离的财务管理系统
- c++勾股定理解直三角形边长
- HAMA 混合信道接入Ad-Hoc,分布式TDMA 协议
- 【MATLAB】基础01
- 如何抠图图片?这个方法值得点赞收藏
- JAVA 网络聊天程序设计与实现(附关键代码) 可群聊私聊发送图片
- cron 表达式解读
- 40%带宽成本节约!京东云视频云正式支持AV1编码
- 谷歌三大论文之the Google File System
- H5与web的区别?
- 网络直播电视之寻找直播地址
- 安卓 修改键盘确定按钮状态,并获取对应点击事件
- 【办公类-16-05-04】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)
- appinventor2 MySQL,写给大家看的安卓应用开发书 App Inventor 2快速入门与实战pdf
热门文章
- d3.js 入门指南
- 让atmega8可以和飞思卡尔xs128一样对IO引脚进行定义
- 企业管理软件开发不能割裂各系统的功能
- 在statspack显示完整的SQL
- HTML5知识点汇总
- ConfigurableListableBeanFactory
- go strconv
- JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式
- es6 --- map的使用
- Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)...