GraphQL 联合:是否可以让多个服务贡献一个列表/数组结果?

问题描述 投票:0回答:1

假设我定义了以下 GraphQL 架构:

type Widgets {
  id: ID!
  name: String!
}

type Basket {
  id: ID!
  widgets: [Widgets]!
}

我有一个小部件服务可以提供这些结果。

但现在我有一个新服务“NEW widget”服务,我想为小部件列表做出贡献。因此,小部件服务提供了小部件列表,但“新小部件”服务还有更多小部件要添加到列表中。

这可能吗?

我知道我可以从“新小部件”服务向小部件或购物篮类型添加新字段,但我想知道是否可以将结果贡献到其他服务的列表中。

这可能来自 GraphQL 规范或 Apollo 联盟吗?

graphql apollo-federation graphql-federation
1个回答
0
投票

不可能通过推送项目来“扩展”由子图之一解析的列表。唯一允许的“扩展”操作是更新列表的项目,而不是列表本身。

GraphQL 联邦中,一般规则是可共享字段在语义上是相等的,因此请求子图 A 或子图 B 中的字段应该会产生相同的响应。无论是 Apollo Federation 规范还是正在开发的 GraphQL 基金会(及其复合模式工作组的努力),规则都是相同的。

这并不意味着该字段总是只解析一次。网关可以多次请求它,每次网关都可以要求解析许多子图中的该字段,以解析仅在这些子图中可用的部分内部结构。

© www.soinside.com 2019 - 2024. All rights reserved.