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

Swift中如何实现基于nextPage字段判断的API分页请求逻辑

基于nextPage标记的游标分页实现方案

核心逻辑流程

整个逻辑不需要提前知道总页数,完全靠接口返回的nextPage字段控制终止,执行步骤如下:

  • 初始化状态:设置初始请求页码为字符串类型的"1",准备空数组存储所有拉取到的数据
  • 进入循环逻辑:只要当前待请求的页码值存在,就发起对应地址的请求
  • 处理当前页响应:拿到响应后第一时间将当前页返回的所有数据条目存入总结果集,避免数据遗漏
  • 游标判断:检查当前响应体中是否存在nextPage字段
    • 若存在:直接取该字段的字符串值作为下一轮请求的页码,拼接成新的请求地址,进入下一轮循环
    • 若不存在:将待请求页码置为空,终止循环,此时总结果集里就是所有分页的数据

注意事项

几个容易出问题的点提前规避:

  1. 接口返回的page和nextPage本身就是String类型,不需要额外做数字类型转换,直接拼接到URL末尾即可,减少不必要的类型转换报错
  2. 禁止硬编码总页数(比如当前场景是2页就写死请求2次),否则后续接口总页数变更时逻辑会直接失效
  3. 必须先存储当前页数据再判断下一页游标,否则最后一页(也就是没有nextPage的那一页)的数据会被漏掉

代码参考(通用伪代码,可直接对应到你用的编程语言)

// 基础配置
const basePath = ".../listing/";
// 初始页码为字符串类型的1,和接口字段类型保持一致
let currentPage = "1";
const totalResult = [];

async function loadAllListData() {
  // 只要有有效页码就持续请求
  while (currentPage) {
    // 拼接当前页请求地址
    const requestUrl = `${basePath}${currentPage}`;
    // 发起请求,替换成你实际项目里的请求方法即可
    const response = await fetch(requestUrl);
    const responseBody = await response.json();

    // 先存当前页的数据,注意把dataList替换成你接口实际返回数据列表的字段名
    totalResult.push(...responseBody.dataList);

    // 检查下一页游标,没有nextPage就把currentPage置为falsy值终止循环
    currentPage = responseBody.nextPage || null;
  }
  return totalResult;
}

// 调用方法即可拿到全量分页数据
loadAllListData().then(allData => {
  console.log("拉取到的全量数据:", allData);
});

对应当前场景的执行验证

  1. 第一次循环:请求.../listing/1,拿到20条数据存入结果,检测到nextPage值为"2",更新currentPage为"2",继续循环
  2. 第二次循环:请求.../listing/2,拿到该页数据存入结果,检测到响应中无nextPage字段,更新currentPage为null,循环终止,最终拿到两页的全部数据

内容的提问来源于stack exchange,提问作者İstemihan Çelik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:27:24