从 API A、B、C 获取数据并将它们推送到 API X

Getting Datas from API A, B, C and Pushing them to API X

我一直在对 Azure Data bricks 和 Azure data factory 进行一些修补,我想知道当你只想通过调用这些服务从一些服务中获取数据时,这些是否有点矫枉过正 API( Rest),然后使用 Rest API 将这些数据推送到服务 X。

我看到Data factory可以调用rest API(但好像不支持Oauth2),但是我还没有找到任何关于将数据推送到另一个rest Api (此时将所有内容整合到 Azure 数据库中并没有多大意义)

那么,我应该使用数据工厂,还是编写一个 python 脚本并使用 Azure Functions 调用它更适合解决这个问题?

此致,

我更喜欢仅在数据可以非常直接地从一个数据库(或文件)移动到另一个数据库时才使用 DataFactory。当您需要更多逻辑与 API 交互时(例如在您的情况下),使用 DataFactory 几乎没有附加价值,因为您已经需要一些计算(例如 Azure Functions)。

如果您的数据摄取是某种工作流程(例如,在推送到 X 之前,您需要按特定顺序排列 A、B 和 C),那么我建议使用 Durable Functions with function chaining and fan-out/fan-in patterns. I also have some video content 来解释这一点。

这里是一个使用函数链的编排的小伪代码示例:

var id = input.GetInput<string>();
var a = await context.CallActivityAsync<DataA>("CallApiAActivity", id);
var b = await context.CallActivityAsync<DataB>("CallApiBActivity", id);
var c = await context.CallActivityAsync<DataC>("CallApiCActivity", id);
var combined = Builder.CombineABC(a, b, c);

return  await context.CallActivityAsync<bool>("PushToApiXActivity", combined);

如果对 A、B 和 C 的调用不相关,那么我建议您执行 fan-out/fan-in 以便可以并行调用这些函数。

Durable Functions 的好处是编排是有状态的,并且会为每个 activity 函数调用创建存储检查点。这通过使用 CallActivityWithRetryAsync 方法启用自动重试。这在处理您无法控制的服务时特别有用,并使您的解决方案更具弹性。