You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自动化脚本开发中如何处理GET请求的分页问题?

处理API分页的两种方案对比

我正在开发一个自动化脚本,用GET接口获取数据后给每个结果加1输出,核心逻辑很简单:

def numbers = get(endpoint)

numbers.each{int number ->
  log.info(number+1)
}

但现在卡在了分页处理上——接口响应限制最多100条结果,而且事前不知道总结果数(可能超过100条),纠结两种实现方式:

  1. 先调用专门接口获取总结果数,再用总数量除以100算出循环次数,用for循环逐页请求详情接口
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:05:20