Graphql Apollo Federation - 基于实现服务解析计算域
Posted
技术标签:
【中文标题】Graphql Apollo Federation - 基于实现服务解析计算域【英文标题】:Graphql Apollo Federation - Resolve a computed field based on implementing service 【发布时间】:2021-03-03 00:52:39 【问题描述】:我正在使用 GraphQL 联合架构,并且正在尝试将新字段添加到扩展类型。 例如,假设我在远程联合模式中有一个类型:
type Book
id: ID!
authorFirstName: String
authorLastName: String
我想根据它的数据来扩展这个类型,例如:
extend type Book @key(fields: "id")
id: ID! @external
authorFullName: String
在解析器中我会写:
Book:
authorFullName: async (parent) =>
return `$parent.authorFirstName $parent.authorLastName`
但不幸的是,它不起作用。 扩展模式只接收 ID 和 __typename,仅此而已。 你知道我怎样才能不仅收到“id”而且还收到其他必要的字段吗?
非常感谢!
【问题讨论】:
【参考方案1】:所以我想通了,我需要在扩展类型上添加必要的字段并用“@external”指令标记它们,并在计算字段中添加“@requires”指令和外部字段。
在我的示例中,解决方案是:(可以理解,联合外部架构没有更改。)
extend type Book @key(fields: "id")
id: ID! @external
authorFirstName: String @external
authorLastName: String @external
authorFullName: String @requires(fields: "authorFirstName authorLastName")
解析器和我上面提到的一样,就是这样。
【讨论】:
以上是关于Graphql Apollo Federation - 基于实现服务解析计算域的主要内容,如果未能解决你的问题,请参考以下文章
Graphql Apollo Federation - 基于实现服务解析计算域
如何将 REST API 迁移到 GraphQL Apollo Federation
GraphQL Apollo Federation-JVM 中 @extends 类型的解析器问题
在 Apollo GraphQl Federation 中,如何在没有 @external 指令的情况下应用 @requires 逻辑?