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

如何在Directus Flow中为外部API实现分页功能?

解决Directus Flow中外部API分页获取数据的问题

要实现分页获取外部API的全部数据,你可以在Flow中添加自定义脚本替代单次Webhook请求,通过循环调用API收集所有分页数据,再传递给后续处理Flow。以下是具体实现步骤:

前提确认

先明确外部API的分页规则:

  • 分页参数:比如是page+per_page(页码+每页条数)还是offset+limit(偏移量+每页条数)
  • 返回标识:是否返回总页数、总条数,或者通过当前页数据长度判断是否还有下一页

流程调整

将原有流程修改为:
手动触发 → 自定义脚本(循环调用API获取全量数据) → 调用目标Flow处理数据

自定义脚本示例

场景1:API使用page+per_page参数,返回包含total_pages字段

// 初始化变量
let allData = [];
let currentPage = 1;
const perPage = 100; // 与API每页返回条数一致
const apiUrl = '你的外部API地址';

// 循环拉取所有分页数据
while (true) {
    // 发起带分页参数的API请求
    const response = await fetch(`${apiUrl}?page=${currentPage}&per_page=${perPage}`, {
        method: 'GET',
        headers: {
            // 若API需要认证,在此添加头部信息,例如:
            // 'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
        }
    });

    // 处理请求失败情况
    if (!response.ok) {
        throw new Error(`API请求失败: ${response.statusText}`);
    }

    const result = await response.json();
    // 合并当前页数据到总数组
    allData = allData.concat(result.data);

    // 判断是否还有下一页
    if (currentPage >= result.total_pages || result.data.length === 0) {
        break;
    }

    currentPage++;
    // 可选:添加1秒延迟,避免触发API限流
    await new Promise(resolve => setTimeout(resolve, 1000));
}

// 将全量数据传递给后续Flow
return {
    data: allData
};

场景2:API使用offset+limit参数

let allData = [];
let offset = 0;
const limit = 100;
const apiUrl = '你的外部API地址';

while (true) {
    const response = await fetch(`${apiUrl}?offset=${offset}&limit=${limit}`, {
        method: 'GET',
        headers: { /* 认证头部信息 */ }
    });

    if (!response.ok) {
        throw new Error(`请求失败: ${response.statusText}`);
    }

    const result = await response.json();
    allData = allData.concat(result.data);

    // 当返回数据不足limit条时,说明已无更多数据
    if (result.data.length < limit) {
        break;
    }

    offset += limit;
    await new Promise(resolve => setTimeout(resolve, 1000));
}

return { data: allData };

后续对接处理Flow

脚本执行完成后,将输出的data数组作为参数传递给原有的循环处理Flow,让其按原有逻辑逐条处理数据即可。

注意事项

  • 根据外部API的实际返回结构和分页规则修改脚本中的参数判断逻辑
  • 若API有请求频率限制,务必添加延迟避免被封禁
  • 若数据量过大,需关注Directus脚本的执行超时限制,必要时拆分流程为多个批次处理

内容的提问来源于stack exchange,提问作者Eleonora Iacopini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:53:39