如何在Azure Data Factory调用API时实现基于rel="next"的分页功能
ADF基于响应头Link字段的rel="next"分页实现方案
你可以根据API的实际场景选择以下两种实现方式,优先选择内置分页规则,配置成本最低。
方案1:使用复制活动内置分页规则(推荐)
该方案适配符合RFC 5988标准的Link响应头格式,无需自定义逻辑:
- 首先创建REST类型的链接服务,填入API的基础地址、认证信息,和你Postman测试的配置保持一致
- 创建对应的REST数据集,绑定到上述链接服务
- 新建复制活动,源端选择你创建的REST数据集,找到「分页规则」配置项,类型选择
ResponseHeader.Link.Next - Sink端选择ADLS Gen2的CSV数据集,根据需求配置CSV的列分隔符、编码、引号处理规则即可
- 触发复制活动运行,ADF会自动识别响应头Link中的rel="next"地址,循环拉取所有页数据后统一写入CSV文件
方案2:自定义Until循环实现(适配非标准Link格式)
如果内置规则无法识别你的Link字段格式,可以用管道变量+循环实现自定义分页:
- 首先在管道中定义3个变量:
nextPageUrl:字符串类型,初始值为API第一页的完整请求地址isLastPage:布尔类型,初始值为falseresultData:数组类型,用来暂存每页返回的业务数据
- 添加Until活动,循环条件设置为
@variables('isLastPage') - 在Until活动内部按顺序添加以下活动:
- Web活动:配置和Postman一致的请求方法、认证信息,URL填写
@variables('nextPageUrl') - Set Variable活动(更新nextPageUrl):用表达式解析Web活动返回的响应头,提取rel="next"对应的URL,参考表达式:
@if(contains(activity('调用API').Output.headers.Link, 'rel="next"'), trim(split(split(activity('调用API').Output.headers.Link, 'rel="next"')[0], '<')[1], '>; '), '') - Set Variable活动(更新isLastPage):判断nextPageUrl是否为空,表达式为
@equals(variables('nextPageUrl'), '') - Set Variable活动(暂存数据):将当前页返回的业务数据数组追加到
resultData变量中
- Web活动:配置和Postman一致的请求方法、认证信息,URL填写
- 循环结束后添加复制活动,将
resultData中的全量数据写入ADLS Gen2的CSV文件即可;如果数据量较大,也可以在每次循环内单独写入一个CSV分片,后续再做合并处理
内容的提问来源于stack exchange,提问作者VRam
相关产品推荐
相关产品推荐

