Федерация Аполлона для небольших проектов - PullRequest
1 голос
/ 06 апреля 2020

Я новичок в graphQL, Apollo et c. Вскоре я буду работать над недорогим приложением с 3 (rest-api) источниками данных и только одним потребителем для создания (в основном) пользовательского типа. В качестве хостинга планируется использовать функции без сервера. Я читал о сшивании схем, федерации и модулях, но не могу найти хорошего ответа на вопрос, почему я должен использовать федерацию Apollo в этом небольшом проекте. Насколько я понимаю, вам нужно несколько серверов Apollo и у вас будет более высокая стоимость развертывания / без серверов по сравнению с монолитным c сервером Apollo.

Упрощенный пример:

Сервер 1:

  type User {
   id: ID!
    firstname: String
  }

Сервер 2:

  extend type User @key(fields: "id") {
    lastname: String
  }

Сервер 3:

  extend type User @key(fields: "id") {
    email: String
  }

Не могли бы вы предложить мне использовать федерацию Apollo? или устаревшая схема сшивания. Могут ли графические модули быть хорошим решением или другим плагином?

1 Ответ

1 голос
/ 09 апреля 2020

Если у вас есть только одна пользовательская схема, не рекомендуется использовать федерацию Apollo. Один сервер Apollo будет достаточно. Вы можете иметь один сервер, говорящий с несколькими источниками данных. Федерация Аполлона - в основном новая версия строчки. (Сшивание не рекомендуется) Сшивание схем и федерация Apollo предназначены для микро-сервисов.

Например, если вы создавали бэкэнд для электронной коммерции. Вы можете иметь сервер, работающий с запросами и мутациями, связанными с типом пользователя (логин, регистрация, информация о пользователе и т. Д. c.). У вас будут другие услуги по заказу, продуктам, запасам и т. Д. c.

Как правило, один домен (схема) для каждой услуги.

Что касается типов расширения, пример, который вы показали, не является идеально. фамилия и адрес электронной почты, вероятно, должны быть объявлены в службе пользователя.

Вы можете расширить тип пользователя в одном из следующих сценариев ios:

  1. Если вы ссылаетесь на тип пользователя в другом схема, например
type Order {
  id:ID!
  products: [Product!]!
  user: User! //the user which did the order
}

2. If you want to add a field to the User schema.
For example, you might want to relate all the orders made by a certain user.

тип расширения User @key (fields: "id") {id: ID! Заказы: [Заказать!]! }

Then in your order service, you can add a resolver that returns all the orders according to user's `id`
...