1. 全量数据拉取#
如果你的联系人数量和群聊数量很大(超过5万),而且你希望能够通过接口拉取到所有的数据,那么普通的翻页接口可能无法满足你的需求。众所周知,数据库在进行翻页操作的时候,翻到大页码时实际上是从0页进行扫描的,扫到了对应页码之后,从开始处拉取数据并返回,这也就导致了普通的翻页方式在数据量达到一定体量之后,翻页数据的返回速度就越来越慢,最终会导致接口超时无法获取到对应的数据。
为了解决上述这样的问题,系统提供了另外一种翻页的方式,通过游标的方式进行翻页,我们以这个接口为例:获取客户列表可以看到这个接口上有一个特殊的字段seq
,这个字段的描述是游标,在current不传时生效,生效后按照游标拉取数据,不返回 总数
也就是我们的翻页操作可以通过这个字段来实现,具体如下可以看到上面这个例子里,我们希望通过每页1000条数据来全量拉取,但是拉到第86页的时候,就已经拉不动了,接口超时,60秒还没有返回数据,这样就造成我们实际上无法达成我们希望的拉取全量数据的目标,但是如果我们换成seq的方式来进行拉取,就没有这个问题了上面这个截图里可以看到,当使用seq
参数进行翻页的时候,请求速度有了飞跃式的提升,并且这个速度不会因为翻页到后面而衰减如何使用 seq 翻页#
3.
在获取到的数据里面,取出来 next_seq
字段,并且将这个字段赋值给 seq
参数来拉取下一页数据
第一次请求#
{
"errcode": 0,
"errmsg": "",
"data": [{
}],
"pageSize": 1000,
"next_seq": "64ae6fe8aaaaaa21c29cbe03"
}
后续请求#
接下来从就可以持续翻页获取更多数据了,首先从上一次接口请求的返回值里拿到 next_seq
的值,然后将这个值传到参数 seq
上,类似这样这个请求最终会拿到类似第一个请求一样的返回值,并且这一次请求一般都会非常快的拿到返回数据,后面就可以重复这个步骤拿更多的数据结束请求#
当某一次返回结果里面并不存在next_seq
的值的时候,这个时候就说明翻页到了尾部,不需要在继续调用接口获取数据了,也无法获取下一页数据了,数据都拉全了,这个时候推出循环即可。