Аполлон Федерация шлюз и другая реализация сервера

Я читаю об федерации Аполлона и о том, как перейти от сшивания схемы, и возник вопрос, когда я прочитал:

Основная стратегия перехода от соединительного шлюза к федерации 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 для рабочего примера.

Другие вопросы по тегам