Apollo Federation网关和另一个服务器实现

时间:2019-06-03 16:53:18

标签: apollo-server apollo-federation

我正在阅读有关阿波罗联盟以及如何从模式拼接迁移的信息,当我阅读以下内容时出现了一个问题:

  

从拼接网关迁移到Apollo Federation的基本策略是从使基础服务具有联邦功能开始

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

基本上联盟网关不能接受其他不支持联盟的服务?因此无法与其他graphql服务器(例如https://github.com/nuwave/lighthouse)一起使用联合身份验证,还是我应该误解了这一行?

3 个答案:

答案 0 :(得分:3)

是的,任何集成到联合网关中的GraphQL服务都必须实现Apollo的federation specification

联邦依赖于包含几种特定类型,指令和类型扩展的服务模式:

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的实现,但是它确实需要按照规范中的概述实现对架构的以上添加。

答案 1 :(得分: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 repo中的示例。

答案 2 :(得分:0)

@daniel-rearden said一样,它确实需要对规范进行补充。 请检出graphql-transform-federation,以帮助您添加所需的信息。还要查看此blog post