微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Apollo GraphQl Federation 中,如何在没有 @external 指令的情况下应用 @requires 逻辑?

如何解决在 Apollo GraphQl Federation 中,如何在没有 @external 指令的情况下应用 @requires 逻辑?

我有三个微服务:Apollo GraphQl Federation 中的服务 A、服务 B 和服务 C。所有服务都有数据库模型,模型 A、模型 B、模型 C。每个服务都有自己的数据库

模型 A 有一个字段 bIds,其中包含 B 模型的 ID 数组。模型 B 有一个字段 cIds 保存 C 模型的 ID 数组。

我写了一个查询,它返回 A 的列表。在每个 A 中有 B 的列表,B 的每个元素都有 C 的列表。

服务 A 的架构(typeDef):

type A @key(fields: "id") {
  id: ID!
  bIds: [ID]
}

服务 B 的架构:

type B @key(fields: "id") {
  id: ID!
  cIds: [ID]
}
extend type A @key(fields: "id") {
  id: ID! @external
  bList: [B]
}

服务 C 的架构:

type C @key(fields: "id") {
  id: ID!
}
extend type B @key(fields: "id") {
  id: ID! @external
  cList: [C]
}

很简单。我的问题是我想要模型 A 中的一个字段,它返回模型 C 的列表,其中包含 bList 的所有 cList 元素,如下所示:

extend type A @key(fields: "id") {
  id: ID! @external
  bList: [B]
  derivedCList: [C] @requires(fields: "bList")
}

deriveCList 的解析器必须从 A 中获取 bList 字段。我该如何实现它? @requires 的字段需要是@external。 bList 不是外部的。它在服务 B 中有解析器。如果我在服务 B 中使用具有 @external declarative 的 bList 字段扩展类型 A,Apollo 会抛出异常。

解决方法

也许这应该是 Apollon Federation 的功能请求?在我看来,将 @external 添加到 bList 是可行的,因为它是 C 的外部。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。