当需要从多个微服务中获取数据时,如何进行排序分页?

问题描述 投票:0回答:0

让我们看看这 2 个微服务:


处理汽车订单的微服务:

桌子:

  • 订单 [order_id, car_id, date,...]

API: /GET /orders


处理汽车数据的微服务:

  • cars [car_id, color ,price,...]

API: /GET /cars


现在的问题是:

如果我想在我的 UI 应用程序中显示分页和排序的合并数据?

[order_id ,car_id ,color ,date ,price .....]

例如:

第一种情况:前 500 行,按

order_id

排序
  • 需要从
    orders
    api
  • 获取数据
  • 然后获取
    car_id
    并丰富来自
    cars
    api
  • 的数据

第二种情况:前 500 行,按

car_id

排序
  • 需要从 cars api 获取数据
  • 然后获取
    order_id
    并丰富来自
    orders
    api
  • 的数据

我实现了获取数据的代码,这是为什么:

const sortByOrder=(sortedBy)=>{
    return ORDER_FIELDS.includes(sortedBy) 
}
const sortByOrCars=(sortedBy)=>{
    return ORDER_FIELDS.includes(sortedBy) 
}
async function fetchOrderData(sortedBy,batchSize){
    
    if(sortByOrder(sortedBy)){
        const orderData = await fetchOrderData(sortedBy,batchSize);
        const orderIds = orderData.map(order=>order.id);
        const cars = await fetchCars(orderIds);
        return joinOrderAndCars(orderData,cars);
    }
    
    if(sortByOrCars(sortedBy)){
        const caersData = await fetchCarsData(sortedBy,batchSize);
        const carsIds = carsData.map(car=>car.id);
        const orders = await fetchOrders(carsIds);
        return joinOrderAndCars(orders,carsData);
    }
}

这是难以维持的幼稚方法

  • 例如丰富来自第三个 api 的数据

寻找更通用的解决方案或模式,并向其他人学习并遇到这个问题

node.js design-patterns microservices api-gateway
© www.soinside.com 2019 - 2024. All rights reserved.