假设我定义了以下 GraphQL 架构:
type Widgets {
id: ID!
name: String!
}
type Basket {
id: ID!
widgets: [Widgets]!
}
我有一个小部件服务可以提供这些结果。
但现在我有一个新服务“NEW widget”服务,我想为小部件列表做出贡献。因此,小部件服务提供了小部件列表,但“新小部件”服务还有更多小部件要添加到列表中。
这可能吗?
我知道我可以从“新小部件”服务向小部件或购物篮类型添加新字段,但我想知道是否可以将结果贡献到其他服务的列表中。
这可能来自 GraphQL 规范或 Apollo 联盟吗?
不可能通过推送项目来“扩展”由子图之一解析的列表。唯一允许的“扩展”操作是更新列表的项目,而不是列表本身。
在 GraphQL 联邦中,一般规则是可共享字段在语义上是相等的,因此请求子图 A 或子图 B 中的字段应该会产生相同的响应。无论是 Apollo Federation 规范还是正在开发的 GraphQL 基金会(及其复合模式工作组的努力),规则都是相同的。
这并不意味着该字段总是只解析一次。网关可以多次请求它,每次网关都可以要求解析许多子图中的该字段,以解析仅在这些子图中可用的部分内部结构。