1

我正在阅读有关 apollo federation 以及如何从模式拼接中迁移的信息,当我阅读时出现了一个问题:

从拼接网关迁移到 Apollo 联邦的基本策略是首先使底层服务具有联邦能力

https://www.apollographql.com/docs/apollo-server/federation/migrating-from-stitching/#adding-federation-support-to-services

基本上联邦网关不能接受另一个不知道联邦的服务?所以没有办法与另一个graphql服务器(如https://github.com/nuwave/lighthouse)使用联合,还是我应该误解那条线?

4

3 回答 3

5

是的,任何并入联邦网关的 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 实现,但它确实需要实现规范中概述的上述对模式的添加。

于 2019-06-03T17:39:14.873 回答
1

就像@daniel-rearden 所说的那样,它确实需要对规范进行补充。查看graphql-transform-federation以帮助您添加所需的信息。另请查看此博客文章

于 2020-02-12T17:20:51.530 回答
0

拥有服务器后,您还需要构建网关,如果您使用的是 docker-compose,则可以使用可重用的 docker 映像,如下所示:


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 存储库以获取工作示例。

于 2019-10-27T14:17:28.963 回答