如何确保REST API分页中的数据一致性

5
我正在移动客户端上构建即时通讯应用程序,通过HTTP请求与RESTful API交互。分页终点是相当标准的 - 它具有起始位置(偏移量)和页面中项目数(限制)。当数据库可能会快速更改时,我很难弄清楚如何确保100%的数据一致性。
例如,在某些情况下,对话中可能会有几十个参与者在一秒钟内发送几十条新消息。我认为猜测其中一些消息可以在HTTP请求从服务器返回分页时更改数据库并不牵强。幸运的是,由于这是一个即时通讯应用程序,我不必考虑数据删除的可能性,只需考虑数据添加。
在我的研究中,以下两个链接非常有帮助,但没有提供清晰的解决方案: 如何确保分页REST API中的数据完整性? 当结果集可能会更改时,如何使用RESTful API实现强大的分页? 我能想到的唯一解决方案是使用先前获取页面中最后一个对象的时间戳。因此,HTTP查询将具有时间戳作为参数,并且服务器将返回在该时间戳之后创建的对象页。是否存在我没有考虑到的潜在问题,或者更好的解决此问题的方法?
1个回答

2

看起来我想到的方法有一个名字 - 基于游标的分页。

下面的链接有一个很好的图形描述和解释,以及一个php示例。

http://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/

Django框架还提供了一份有用的指南,比较了两种不同的分页技术(LimitOffsetPagination和CursorPagination)。

http://www.django-rest-framework.org/api-guide/pagination/

游标分页需要一个唯一且不变的项目排序方式。Facebook和Twitter使用一些生成的ID。至于我,我决定简单地使用对象创建时的时间戳,因为它支持毫秒级精度。现在应该足够好了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接