Аполлон Федерация шлюз и другая реализация сервера
Я читаю об федерации Аполлона и о том, как перейти от сшивания схемы, и возник вопрос, когда я прочитал:
Основная стратегия перехода от соединительного шлюза к федерации Apollo - начать с создания базовых сервисов с поддержкой федерации.
https://www.apollographql.com/docs/apollo-server/federation/migrating-from-stitching/
в основном шлюз федерации не может принять другую услугу, не связанную с федерацией? поэтому нет возможности использовать федерацию с другим сервером GraphQL (например, https://github.com/nuwave/lighthouse), или мне следует неправильно понять эту строку?
1 ответ
Да, любой сервис GraphQL, встроенный в шлюз федерации, должен реализовывать спецификацию федерации Apollo.
Федерация опирается на схему сервиса, содержащую несколько конкретных типов, директив и расширений типов:
scalar _Any
scalar _FieldSet
union _Entity
type _Service {
sdl: String
}
extend type Query {
_entities(representations: [_Any!]!): [_Entity]!
_service: _Service!
}
directive @external on FIELD_DEFINITION
directive @requires(fields: _FieldSet!) on FIELD_DEFINITION
directive @provides(fields: _FieldSet!) on FIELD_DEFINITION
directive @key(fields: _FieldSet!) on OBJECT
directive @extends on OBJECT
Служба не обязательно должна быть реализацией GraphQL.js, но должна реализовывать вышеуказанные дополнения к схеме, как указано в спецификации.
Как сказал @daniel-Rearden, ему действительно нужно внести дополнения в спецификацию. Ознакомьтесь с https://github.com/0xR/graphql-transform-federation, чтобы помочь вам добавить необходимую информацию. Также ознакомьтесь с этим сообщением в блоге
Если у вас есть сервер, вам также необходимо построить шлюз, если вы используете docker-compose, вы можете использовать повторно используемый образ докера следующим образом:
version: '3'
services:
a:
build: ./a # one service implementing federation
b:
build: ./b
gateway:
image: xmorse/apollo-federation-gateway
ports:
- 8000:80
environment:
CACHE_MAX_AGE: '5' # default cache
ENGINE_API_KEY: '...' # to connect to the apollo engine
POLL_INTERVAL: 30 # to update services changes
URL_0: "http://a"
URL_1: "http://b"
Проверьте репозиторий github для рабочего примера.