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/federation 包的替代品

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

使用和组合另一个公共 apollo graphql api 的最佳方式:federation v 模式拼接