Объединение наборов данных отдыха в Федерации с распознавателями? - PullRequest
2 голосов
/ 19 сентября 2019

довольно новый для GraphQL и Apollo Federation.

У меня вопрос, возможно ли заполнить один набор данных другим, например:

# in Shop Service
type carId {
 id: Int
}

type Shop @key(fields: "id") {
  id: ID!
  name: String
  carIds: [CarId]
}
# in Car Service
type Car {
  id: ID!
  name: String
}
extends type Shop @key(fields: "id") {
  id: ID! @external
  cars: [Car]
}

CarResolver

Query{...},
Shop: {
    async cars(shop, _, { dataSources }) {
      console.log(shop); // Issue here is it returns the references that are an object only holding the `id` key of the shop, I need the `cars` key here, to pass to my CarsAPI
      return await dataSources.CarsAPI.getCarsByIds(shop.carsIds);
    }
  }

Из API остальных магазинов ответ будет выглядеть так:

[{id: 1, name: "Brians Shop", cars: [1, 2, 3]}, {id: 2, name: "Ada's shop", cars: [4,5,6]}]

Из API остальных автомобилей ответ будет выглядеть следующим образом:

[{id: 1, name: "Mustang"}, {id: 2, name: "Viper"}, {id: 3, name: "Boaty"}]

Итак, что я хочу заархивировать, так это запросить у моего сервера GraphQL:

Shop(id: 1) {
  id
  name
  cars {
    name
 }
}

И затем ожидать:

{
  id: 1,
  name: "Brian's shop",
  cars: [
    {name: "Mustang"},
    {name: "Viper"},
    {name: "Boaty"}
  ]
}

Возможно ли это, это было то, что я подумал, когда явыбрал федерацию:)

1 Ответ

1 голос
/ 20 сентября 2019

Так что, если я правильно понимаю после ваших комментариев, вам нужно, чтобы служба carIds от Магазина пришла в вашу Автомобильную службу внутри распознавателя cars.

Вы можете использоватьДиректива @requires, которая сообщит серверу Apollo, что вам нужно поле (или пара), прежде чем он начнет выполнять распознаватель cars.То есть:

Автосервис

extend type Shop @key(fields: "id") {
  id: ID! @external
  carIds: [Int] @external
  cars: [Car] @requires(fields: "carIds")
}

Теперь внутри резольвера cars вы сможете получить доступ к shop.carIds по первому параметру.

См .: https://www.apollographql.com/docs/apollo-server/federation/advanced-features/#computed-fields

...