graphql: соединение API остальных - PullRequest
0 голосов
/ 16 мая 2018

Я хотел бы знать, есть ли способ объединить два остальных API для атрибута name , используя graphql .Это ответ, который у меня есть

// 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 правильным инструментом?

1 Ответ

0 голосов
/ 14 июня 2018

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 для поддержки получать цену по имени и получать только те цены, которые вам нужны.

...