我正在研究微服务架构,我想聚合来自两个微服务的数据。
例如,前端调用 API 网关,API 网关调用两个微服务 Customer 和 Order 微服务。客户微服务返回客户详细信息,订单微服务返回客户订购的所有产品。
这是使用 Ocelot 或 Azure API 管理从两个微服务聚合后 API 网关返回的格式。
格式 1
{
"Customers":[
{
"customerId":1001,
"customerName":"Tom"
},
{
"customerId":1002,
"customerName":"Jerry"
}
],
"Orders":[
{
"CustomerId":1001,
"Orders":[
{
"ProductId":"PRO1",
"ProductName":"Books"
},
{
"ProductId":"PRO2",
"ProductName":"Pens"
}
]
},
{
"CustomerId":1002,
"Orders":[
{
"ProductId":"PRO3",
"ProductName":"Pencils"
},
{
"ProductId":"PRO4",
"ProductName":"Toys"
}
]
}
]
}
我想要的格式是格式 2。
格式 2
{
"OrderDetails":[
{
"customerId":1001,
"customerName":"Tom",
"Orders":[
{
"ProductId":"PRO1",
"ProductName":"Books"
},
{
"ProductId":"PRO2",
"ProductName":"Pens"
}
]
},
{
"customerId":1002,
"customerName":"Jerry",
"Orders":[
{
"ProductId":"PRO3",
"ProductName":"Pencils"
},
{
"ProductId":"PRO4",
"ProductName":"Toys"
}
]
}
]
}
第二种格式可以使用 Ocelot 实现,但是数据的合并是基于网关上的 id 并且需要一些处理。
使用业务逻辑在网关上聚合数据是一种好习惯吗?如果不是这种聚合应该遵循什么做法?
如果您可以提供一些参考来使用 Azure API 管理实现此聚合,那就太好了。