如何对 GraphQL 查询进行排序以输出相互依赖的数据?

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

我有两个微服务 ms1ms2,每次使用 Apollo GraphQL 构建的 API 网关通过解析器发送请求时,它们都会输出不同类型的数据。

具体来说,第一个解析器

getCart(userId: ID!): Cart!
调用 ms1 并使用以下响应主体对其进行响应:

{
  "items": [
    {
      "itemId": "8a016af8-5336-4799-b806-73976996aa6f",
      "quantity": 1
    },
    {
      "itemId": "9a016af8-5336-4799-b806-73976996aa6f",
      "quantity": 2
    }
  ]
}

也就是说,

Cart
类型,只是一个包含具有 id 和数量的项目数组的对象。

第二个解析器

getItem(itemId: ID!): Item!
调用 ms2 并使用以下响应正文对其进行响应:

{
  "itemId": "7a016af8-5336-4b99-b806-73976996aadf",
  "name": "Jack Daniel's Blue Label",
  "price": 29.99
}

有什么方法可以直接从前端(例如 Apollo Sandbox 或 GraphiQL)“组合”或排序这两个查询,以便我得到以下响应?

{
  "items": [
    {
      "itemId": "8a016af8-5336-4799-b806-73976996aa6f",
      "name": "Jack Daniel's - Honey",
      "price": 19.99,
      "quantity": 1
    },
    {
      "itemId": "7a016af8-5336-4799-b806-73976996aa6f",
      "name": "Jack Daniel's - Red Label",
      "price": 29.99,
      "quantity": 2
    }
  ]
}

在伪 graphql 中我在想这样的事情:

query GetCartInfo($userId: ID!) { 
  getCart(userId: $userId) {
    items {
      itemId => getItem(itemId: $itemId) {
        name
        price
      }
      quantity
    }
  }
}

如果那不可能,实现这一目标的最佳方法是什么?在 API 网关中创建一个新的解析器?从前端的另一个服务修改数组?

感谢您提供有关该主题的帮助和信息,我将不胜感激:D

祝你有美好的一天!

javascript json graphql apollo api-gateway
© www.soinside.com 2019 - 2024. All rights reserved.