graphql: 休息 API 加入

graphql: rest API join

我想知道是否有办法使用 graphql[=21= 在 name 属性上连接两个 rest API ].这些是我得到的回复

// products API
[
 {
  id: "0001",
  name: "a name",
  color: "black",
  size: "L"
 },
 {
  id: "0002",
  name: "an other name",
  color: "red",
  size: "M"
 }
]

// price API
[
 {
  id: "xyz1",
  name: "a name",
  price: 10
 },
 {
  id: "xyz2",
  name: "an other name",
  price: 20
 }
]

我想用 graphql 来组合它们,这样

// response from graphql
[
 {
  id: "0001",
  name: "a name",
  price: 10,
  color: "black",
  size: "L"
 },
 {
  id: "0002",
  name: "an other name",
  price: 20,
  color: "red",
  size: "M"
 }
]

graphql 是正确的工具吗?

GraphQL 不支持在某些属性中加入 2(或更多)API。您可以做的是从解析器中的两个 API 获取数据并创建一个包含两个结果的对象。

类似于(伪代码):

const products: yourDefinedType = []

fetch.productsAPI(productFromAPI
   fetch.pricesAPI(pricesFromAPI
      if (pricesFromAPI.name === productFromAPI.name) {
         product.push({
           id: productFromAPI.id,
           name: productFromAPI.name,
           color: productFromAPI.color,
           size: productFromAPI.size,
           price: pricesFromAPI.price
         })
      }
   )      
)

请记住,这会产生性能问题,因为您需要获取每个产品的所有价格。另一种方法是让您的价格 REST api 以支持按名称获取价格并仅获取您需要的价格。