如何在.NET中使用HotChocolate扩展GraphQL自省类型

c#

在我的情况下,我想扩展__EnumValue自省类型以本质上携带有关枚举值的附加信息。如何向内省添加其他字段。

回答

在热巧克力中,每种类型都可以扩展。在上面的例子中,我们想要扩展一个对象类型,它是 GraphQL 中的输出类型。

为此,我们创建了一个简单的类并使用ExtendObjectTypeAttribute.

[ExtendObjectType("__EnumValue")]
public class EnumTypeExtension
{
    public string GetAdditionalInfo([Parent] IEnumValue enumValue) =>
        enumValue.ContextData["additionalInfo"].ToString();
}

请注意,您可以注入原始类型具有的任何信息。在这种情况下,我们注入运行时值__EnumValue类型以暴露附加信息。

以上转换为以下 SDL:

extend type __EnumValue {
  additionalInfo: String!
}
extend type __EnumValue {
  additionalInfo: String!
}

最后,我们需要使用模式注册我们的类型扩展。

之后,我们可以像下面这样查询:

query {
  __type(name: "MyEnum") {
    enumValues {
       additionalInfo
    }
  }
}

关于这一点的一点警告,随着规范的发展,它可能会在自省中引入新的领域,这些领域可能会与您的领域发生冲突。因此,实际引入一个字段extensions并将您的扩展字段放在那里是一个很好的做法。这遵循了 GraphQL 中请求和响应的扩展方式。

type EnumValueExtensions {
  additionalInfo: String!
}

extend type __EnumValue {
  extensions: EnumValueExtensions!
}


以上是如何在.NET中使用HotChocolate扩展GraphQL自省类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>