我在合并远程模式时遇到了一些问题。作为基础,我采用了教程中引用的 Apollo GraphQL 包 ( https://www.apollographql.com/docs/tutorial/introduction/ )。我想对以下架构进行原型设计:
- 2 项服务
- 1 个代理对这些服务的请求的网关
- 我不想像阿波罗联盟那样使用解决方案
- 我想使用关注点分离模式
以下是这两个服务的基本类型 def:
公司架构:
type Query {
company: Company
}
type Company {
id: ID!
name: String
}
i18n 架构:
type Query {
i18n: I18N
}
type I18N {
id: ID!
username: String
}
type Company {
id: ID!
i18n(id: ID): I18N
}
服务实现相应的解析器。网关为这些服务生成远程方案并尝试合并它们。这就是导致一些问题的原因
const schema = mergeSchemas({
schemas: [executableI18NSchema, executableCompanySchema],
});
第一个问题是数组中模式的顺序似乎很重要。如果 executableCompanySchema 是我可以正确查询公司数据的最后一个元素。一旦我将它移动到第一个位置,我就会收到类似“无法查询name
类型字段的消息,Company
因为mergeSchemas
只从最后一个数组元素中获取 typeDefs 并覆盖前一个元素中的一次。我希望合并函数合并给定的模式适当地。
所以我做了一些研究,发现在最近的 graphql-tools 版本中存在一个stitchSchemas 函数。所以我已经将它们更新到最新版本,现在stitchSchemas 而且mergeSchemas 返回合并模式的预期typeDefs 等。看起来我已经取得了一些进展,但是当我尝试在 Playground 中发出查询请求时,我得到一个错误:超出了最大调用堆栈大小。因此,Apollo 服务器似乎与最新的 graphql-tools 版本不兼容。
有什么想法或想法吗?