如何在Azure Data Factory中通过查询参数实现Typeform API分页
在Azure Data Factory中实现Typeform API分页获取全量数据
核心思路
通过Until循环活动结合变量控制分页逻辑,动态生成带after参数的请求URL,同时从API响应中提取嵌套的token作为下一页的偏移值,首次请求通过空变量跳过after参数。
具体实现步骤
1. 初始化变量
在ADF管道中创建以下变量:
nextToken:字符串类型,初始值设为空字符串,用于存储下一页的tokenhasMoreData:布尔类型,初始值设为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终止循环
针对问题的解决说明
- 嵌套token提取问题:ADF支持直接通过点语法访问嵌套属性,无需使用JSONPath格式,直接用
activity('Web活动名称').output.items[0].token即可提取数组第一个元素的token值 - 首次请求空偏移量:通过初始化
nextToken为空字符串,结合动态URL的条件判断,首次请求自动跳过after参数,符合Typeform API的要求
内容的提问来源于stack exchange,提问作者Naimesh Vaja
相关产品推荐
相关产品推荐

