自动化脚本开发中如何处理GET请求的分页问题?
处理API分页的两种方案对比
我正在开发一个自动化脚本,用GET接口获取数据后给每个结果加1输出,核心逻辑很简单:
def numbers = get(endpoint) numbers.each{int number -> log.info(number+1) }
但现在卡在了分页处理上——接口响应限制最多100条结果,而且事前不知道总结果数(可能超过100条),纠结两种实现方式:
- 先调用专门接口获取总结果数,再用总数量除以100算出循环次数,用for循环逐页请求详情接口
- 用while循环,从
startAt=0开始请求,每次拿到结果后将startAt加100,直到返回的结果数量少于100条就停止,示例代码修正后如下:
boolean continueLoop = true; int startAt = 0; while(continueLoop){ def numbers = get(endpoint) .queryString('startAt', startAt) numbers.each{int number -> log.info(number+1) } startAt += 100; if(numbers.size() < 100) continueLoop = false; }
(注:原示例存在语法和逻辑小问题,已修正:bool改为boolean,number.each改为numbers.each,判断条件调整为结果数量小于100)
两种方案优劣对比
先拿总数的for循环方案
- 优点:逻辑直观,能提前知晓循环次数,方便做进度跟踪
- 缺点:多一次总数接口调用;若分页请求过程中数据有新增/删除,总数和实际可获取结果会出现偏差,可能漏取数据或请求空页
while循环直到结果不足100条的方案
- 优点:无需额外调用总数接口,减少API请求;自动适配数据变化,不会因数据更新出现偏差
- 缺点:无法提前知道总循环次数,进度跟踪稍麻烦
选择建议
如果API没有提供总数接口,或者数据可能在请求过程中变动,优先选while循环方案;如果数据稳定且需要展示进度,再考虑先拿总数的for循环方案。如果当前用for循环需要调用两个接口,也可以换成while循环来减少一次接口调用,避免总数与实际数据不一致的问题。
内容的提问来源于stack exchange,提问作者Damian Wodziński
相关产品推荐
相关产品推荐

