运行分页 REST 调用,尝试访问分成页面的大型数据集。
事先使用三足身份验证,自动将刷新令牌和后续不记名令牌保存(发布请求)到 Azure Key Vault 密钥中。然后,我读取一次 -> 保存到变量,然后在 REST Web 活动中使用。
当进行 REST Web 调用时,会生成分页结果。
{
"pagination": {
"cursorState": "ck384730randomValue",
"limit": 40
},
"results": [
{},
{},
{}
}
}
光标状态是指向下一页的指针,意味着下一个请求是
https:/<baseUrl>/endpoint?cursorState=<The value from the JSON>
我使用 Until 活动循环页面。
limit=40 是数据供应商提供的最大值。 (默认为 20)
然而问题出现了,经过这么多页之后,存储在密钥库中的不记名令牌过期了,整个事情失败了。
我只能通过在until活动内的每个调用中重复授权调用来解决它。但我担心对 keyvault 进行如此多的调用会产生成本影响。 还有其他选择吗?我正在寻找一种更智能的方法来管理此类问题。
通常当您调用API生成不记名令牌时,它会显示令牌有效期,如下所示
我认为创建一个 UNTIL 循环并在其中生成令牌。令牌生成后,将其存储到变量中,然后放置 WAIT 活动并让它等待令牌到期时间。
您还需要添加退出循环的条件,在您的情况下,您可以将页面循环计数器(在 for 循环中用于从每个页面下载数据)与总页面进行比较。
@greater(variables('varCounter'),40)
您可以在管道的开头添加此令牌循环,并让它继续独立运行,并添加独立于此循环的其他活动流。这样当页面达到大于40时就会自动退出。
您可以添加 For 循环并添加下载页面所需的活动。 for 循环条件应该看起来像这样
@range(variables('varCounter'),40)
将令牌添加到 AKV 中是没有意义的,因为不记名令牌将在一段时间后过期。