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

如何在Azure Data Factory中通过查询参数实现Typeform API分页

在Azure Data Factory中实现Typeform API分页获取全量数据

核心思路

通过Until循环活动结合变量控制分页逻辑,动态生成带after参数的请求URL,同时从API响应中提取嵌套的token作为下一页的偏移值,首次请求通过空变量跳过after参数。


具体实现步骤

1. 初始化变量

在ADF管道中创建以下变量:

  • nextToken:字符串类型,初始值设为空字符串,用于存储下一页的token
  • hasMoreData:布尔类型,初始值设为true,控制循环是否继续
  • allResponses:数组类型,初始值设为[],用于存储所有分页返回的响应数据

2. 配置Until循环活动

设置循环终止条件为:

@equals(variables('hasMoreData'), false)

3. 循环内的操作步骤

在Until循环中依次添加以下活动:

(1)构建动态请求URL

使用Set Variable活动,将临时变量requestUrl设为动态生成的URL:

@concat(
    'https://api.typeform.com/forms/Na5du3oD/responses?page_size=1000',
    if(empty(variables('nextToken')), '', concat('&after=', variables('nextToken')))
)
  • 首次请求时,nextToken为空,URL自动省略after参数
  • 后续请求自动拼接&after=<token>参数
(2)调用Typeform API

添加Web活动,配置如下:

  • 方法:GET
  • URL:@variables('requestUrl')
  • 头部:添加授权头Authorization: Bearer <你的Typeform API密钥>,以及Content-Type: application/json
(3)合并当前页数据到总数组

使用Set Variable活动更新allResponses:

@union(variables('allResponses'), activity('调用Typeform API').output.items)
(4)提取下一页token并更新循环状态

添加Set Variable活动更新nextToken:

@if(
    greater(length(activity('调用Typeform API').output.items), 0),
    activity('调用Typeform API').output.items[0].token,
    ''
)

再添加另一个Set Variable活动更新hasMoreData:

@and(
    greater(length(activity('调用Typeform API').output.items), 0),
    equals(length(activity('调用Typeform API').output.items), 1000)
)
  • 当返回的items数量小于1000时,判定为无更多数据,将hasMoreData设为false终止循环

针对问题的解决说明

  1. 嵌套token提取问题:ADF支持直接通过点语法访问嵌套属性,无需使用JSONPath格式,直接用activity('Web活动名称').output.items[0].token即可提取数组第一个元素的token值
  2. 首次请求空偏移量:通过初始化nextToken为空字符串,结合动态URL的条件判断,首次请求自动跳过after参数,符合Typeform API的要求

内容的提问来源于stack exchange,提问作者Naimesh Vaja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:15:27