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

Ste*_*son 1 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)一起使用,还是我应该误解那条线?

Dan*_*den 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
Run Code Online (Sandbox Code Playgroud)

该服务不必是 GraphQL.js 实现,但它确实需要实现规范中概述的架构的上述添加。