Apollo Federation 网关和另一个服务器实现
Apollo Federation gateway and another server implementation
我正在阅读有关 apollo 联邦以及如何从模式拼接迁移的信息,当我阅读时出现了一个问题:
The basic strategy for migrating from a stitching gateway to Apollo Federation is to start by making the underlying services federation-capable
基本上联合网关不能接受另一个不支持联合的服务?所以没有办法与另一个 graphql 服务器(例如 https://github.com/nuwave/lighthouse)使用联合,或者我应该误解那行吗?
是的,任何并入联合网关的 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 实现,但它确实需要按照规范中概述的方式对架构进行上述添加。
一旦你有了服务器,你还需要构建网关,如果你正在使用 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 的工作示例。
与 一样,它确实需要对规范进行补充。
查看 graphql-transform-federation to assist you with adding the required info. Also check out this blog post
我正在阅读有关 apollo 联邦以及如何从模式拼接迁移的信息,当我阅读时出现了一个问题:
The basic strategy for migrating from a stitching gateway to Apollo Federation is to start by making the underlying services federation-capable
基本上联合网关不能接受另一个不支持联合的服务?所以没有办法与另一个 graphql 服务器(例如 https://github.com/nuwave/lighthouse)使用联合,或者我应该误解那行吗?
是的,任何并入联合网关的 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 实现,但它确实需要按照规范中概述的方式对架构进行上述添加。
一旦你有了服务器,你还需要构建网关,如果你正在使用 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 的工作示例。
与