2

我在合并远程模式时遇到了一些问题。作为基础,我采用了教程中引用的 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 版本不兼容。

有什么想法或想法吗?

4

0 回答 0