常规的分页方式

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分页相关推荐

  1. 分页第一页用0还是1_计算机用0 和1刻画文字、图片和声音

    计算机用0 和1刻画文字.图片和声音 对计算机来说,所有的东西都是0和1的组合.其背后是数以亿计的晶体管在频繁跳动维持其逻辑,信息转化成01的代码形式存储和传输,以此刻画这个客观世界. 图1 漫画(来 ...

  2. 分页第一页用0还是1_码动未来,用0和1改变世界

    原标题:码动未来,用0和1改变世界 10月24日,是每年一度的程序员节,是属于码农们的节日. 为什么是1024? 计算机存储中,1G=1024M,1M=1024Kb,1kb=1024bit,再加上10 ...

  3. 分页第一页用0还是1_【一点资讯】程序员节:码动未来,用0和1改变世界 www.yidianzixun.com...

    10月24日,是每年一度的程序员节,是属于码农们的节日. 为什么是1024? 计算机存储中,1G=1024M,1M=1024Kb,1kb=1024bit,再加上1024为2的十次方,二进制计数基本计量 ...

  4. 分页第一页用0还是1_洗脸用冷水还是热水好?这些错误只要犯1个,你的脸就白洗了!...

    洗脸是我们每天都要做的事情,然而,并不是所有的人都会洗,更可怕的是,很多人可能第一步就错了. 而洗脸没洗对,就意味着接下来皮肤可能出现一系列的问题,比如长痘痘.毛孔粗大.皮肤干燥或容易出油...... ...

  5. 分页第一页用0还是1_短视频拍摄技巧分享:教你如何从0到1学会用手机拍大片...

    本文为你介绍短视频拍摄技巧.短视频拍摄方法.短视频拍摄手法.手机如何拍短视频等相关内容. 手机不仅能够满足我们日常生活的通讯.娱乐,也能够用它拍摄出具有大片效果的短视频来.短视频拍摄技巧 现在的手机有 ...

  6. 分页第一页用0还是1_白杨SEO:5000字从0-1拆解如何用知乎排名做精准引流和变现?...

    短视频,自媒体,达人种草一站服务 大纲如下: 1.知乎排名原理解析 2.做知乎排名具体步骤 3.账号注册及定位(重要) 4.用户需求关键词挖掘 5.如何制作出一篇高质量内容?(核心) 6.被动引流注意 ...

  7. mvc jquery ajax分页实例,jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页...

    jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解,mvcpagerajax分页 简单的两个步骤即可实现分页功能 //回调里面进行业务处理 function lo ...

  8. 排序后分页第一页数据和第二页数据重复问题

    问题描述     数据分页时需要根据值班时间F_Start 字段倒序,即使用OrderByDescending(t => t.F_Start),经过调试发现返回的总条数records,总页数to ...

  9. mysql创建临时表 分页_ASP+MySQl利用临时表分页第一页数据正常,下一页往后没有数据...

    具体代码如下,那位高手帮解决下: 具体代码如下,那位高手帮解决下: '初始化数据库连接 strConnection = "dsn=mydata;driver={myodbd driver}; ...

最新文章

  1. 进程线程002 等待链表 调度链表
  2. java中queue排序_Java中常见的排序算法有哪些?---选择排序
  3. c语言数据结构 自测卷答案,《c语言数据结构》第2章 自测卷答案
  4. 【渝粤题库】国家开放大学2021春3896人文英语1题目
  5. 把Excel中的数据转换成Sql语句
  6. hbuilder设置html格式,Hbuilder中如何设置格式化CSS代码为单行
  7. SpringBoot+Vue实现前后端分离的财务管理系统
  8. c++勾股定理解直三角形边长
  9. HAMA 混合信道接入Ad-Hoc,分布式TDMA 协议
  10. 【MATLAB】基础01
  11. 如何抠图图片?这个方法值得点赞收藏
  12. JAVA 网络聊天程序设计与实现(附关键代码) 可群聊私聊发送图片
  13. cron 表达式解读
  14. 40%带宽成本节约!京东云视频云正式支持AV1编码
  15. 谷歌三大论文之the Google File System
  16. H5与web的区别?
  17. 网络直播电视之寻找直播地址
  18. 安卓 修改键盘确定按钮状态,并获取对应点击事件
  19. 【办公类-16-05-04】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)
  20. appinventor2 MySQL,写给大家看的安卓应用开发书 App Inventor 2快速入门与实战pdf

热门文章

  1. d3.js 入门指南
  2. 让atmega8可以和飞思卡尔xs128一样对IO引脚进行定义
  3. 企业管理软件开发不能割裂各系统的功能
  4. 在statspack显示完整的SQL
  5. HTML5知识点汇总
  6. ConfigurableListableBeanFactory
  7. go strconv
  8. JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式
  9. es6 --- map的使用
  10. Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)...