如何在Oracle Integration Cloud(OIC)中将两个API响应合并为单个负载?
如何在Oracle Integration Cloud(OIC)中合并两个API响应为单个负载
问题背景
需将客户API与订单API的响应合并为单个负载,使每个客户与对应索引的订单配对,同时需处理客户与订单数量不一致的情况。
示例数据
API 1响应(客户)
{ "Customers": [ { "CustomerID": "c8239", "CustomerName": "Robert", "CustomerEmail": "robert@gmail.com" }, { "CustomerID": "c3242", "CustomerName": "John", "CustomerEmail": "john@gmail.com" }, { "CustomerID": "c4544", "CustomerName": "David", "CustomerEmail": "david@gmail.com" } ] }
API 2响应(订单)
{ "Order": [ { "OrderID": "o232", "OrderAmount": "15000" }, { "OrderID": "o231", "OrderAmount": "18000" }, { "OrderID": "0233", "OrderAmount": "17000" } ] }
合并后预期响应
{ "Combine": [ { "Customer": [ { "CustomerID": "c8239", "CustomerName": "Robert", "CustomerEmail": "robert@gmail.com" } ], "Order": [ { "OrderID": "o232", "OrderAmount": "15000" } ] }, { "Customer": [ { "CustomerID": "c3242", "CustomerName": "John", "CustomerEmail": "john@gmail.com" } ], "Order": [ { "OrderID": "o231", "OrderAmount": "18000" } ] }, { "Customer": [ { "CustomerID": "c4544", "CustomerName": "David", "CustomerEmail": "david@gmail.com" } ], "Order": [ { "OrderID": "0233", "OrderAmount": "17000" } ] } ] }
补充说明
- 目标:将客户API与订单API的响应数据合并为单个负载,按索引配对客户与订单
- 工具:Oracle Integration Cloud(OIC),可使用Data Stitch或Mapper、循环组件实现
- 约束:客户与订单的数量可能变化,不一定一一对应
OIC实现方案
方法1:For Each循环+Mapper组件
- 存储API响应:依次调用两个API,将响应分别保存到OIC变量(如
$customerResp和$orderResp) - 确定循环基准:比较客户列表与订单列表的长度,选择较长的列表作为循环遍历的基准,避免遗漏数据
- 按索引提取数据:在
For Each循环内,使用OIC的get()函数按循环索引提取对应数据:- 提取客户:
get($customerResp.Customers, $loopIndex) - 提取订单:
get($orderResp.Order, $loopIndex),若索引超出订单列表长度,自动返回空对象
- 提取客户:
- 构造合并项:在Mapper中将提取到的客户数据放入
Customer数组、订单数据放入Order数组,组成单个合并对象 - 收集结果:将每个循环生成的合并项添加到
Combine数组,最终输出该数组
方法2:Data Stitch组件
- 导入数据源结构:在Data Stitch中导入两个API的响应结构作为数据源
- 设置关联规则:选择按索引位置进行关联(无业务关联字段),配置当某一方无对应数据时填充空值
- 映射输出结构:将关联后的客户、订单数据分别映射到目标结构的
Customer和Order数组中,生成Combine数组 - 集成到流程:将Data Stitch组件加入OIC集成流程,传入两个API的响应数据,输出合并后的负载
内容的提问来源于stack exchange,提问作者B G
相关产品推荐
相关产品推荐

