Как использовать mergeSchemas для удаленных схем с Apollo Server - PullRequest
1 голос
/ 13 июля 2020

У меня проблемы с объединением удаленных схем. За основу я взял пакет Apollo GraphQL, упомянутый в руководстве (https://www.apollographql.com/docs/tutorial/introduction/). Я хочу создать прототип следующей архитектуры:

  • 2 службы
  • 1 шлюз, который делегирует запросы этим службам
  • Я не хочу использовать решения как Apollo Федерация
  • Я хочу использовать шаблон разделения проблем

Вот определение базового типа для двух служб:

Схема компании:

type Query {
  company: Company
}

type Company {
  id: ID!
  name: String
}

Схема i18n:

type Query {
  i18n: I18N
}

type I18N {
  id: ID!
  username: String
}

type Company {
  id: ID!
  i18n(id: ID): I18N
}

Службы реализуют соответствующие преобразователи. Шлюз генерирует удаленные схемы для этих сервисов и пытается их объединить. И это то, что вызывает некоторые проблемы

const schema = mergeSchemas({
    schemas: [executableI18NSchema, executableCompanySchema],
});

Первая проблема заключается в том, что кажется, что порядок схем в массиве имеет значение. Если исполняемый файлCompanySchema - последний элемент, я могу правильно запросить данные компании. Как только я перемещаю его в первую позицию, я получаю сообщения типа «Невозможно запросить поле name для типа Company, потому что mergeSchemas берет typeDefs только из последнего элемента массива и отменяет один раз из предыдущего. Я бы ожидайте, что функция слияния правильно объединит данные схемы.

Итак, я провел небольшое исследование и обнаружил, что функция stitchSchemas существует в более поздней версии graphql-tools. Поэтому я обновил их до последней версии и прямо сейчас stitchSchemas, но также mergeSchemas возвращают ожидаемый typeDefs et c. для объединенной схемы. Похоже, я добился некоторого прогресса, но как только я пытаюсь сделать запрос запроса в Playground, я получаю сообщение об ошибке: максимальный вызов превышен размер стека. Таким образом, сервер Apollo несовместим с последней версией graphql-tools.

Есть мысли или идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...