如何使用 HotChocolate GraphQL 将查询/突变/订阅类型拆分为多个文件?

Dev*_*est 4 graphql asp.net-core hotchocolate

我是 GraphQL 世界的新人,正在尝试找到一种拥有多种查询类型或如何将查询类型拆分为多个文件的方法。我使用 Hot Chocolate for Asp.Net Core,一切看起来都很好并且有效。但是,如果我需要在一个 GraphQL API 中组合几个查询怎么办?一些完全不相关的东西,如 DogsQuery 和 CarsQuery。

在 Asp.Net 中,我写的类似于:

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddGraphQLServer()
            //.AddQueryType<DogsQuery>()
            .AddQueryType<CarsQuery>();
}
Run Code Online (Sandbox Code Playgroud)

如果我同时只使用一个查询类(狗或汽车),它就可以正常工作。但如何同时使用两者呢?我搜索了很多但找不到答案。

Fre*_*rke 8

graphql 中不能有多个查询/突变/订阅类型,但可以在 HotChocolate 中将类型拆分为多个文件。

您可以使用[ExtendObjectType(Name = "Query")]两种查询类型上方的属性。这对于订阅 ( [ExtendObjectType(Name = "Subscription")]) 和变更 ( [ExtendObjectType(Name = "Mutation")]) 的工作方式相同。

该属性用于合并同一 HotChocolate 服务器中的任意两个 graphql 类型。name 值必须是您想要将 C# 类合并到的 GraphQl 类型的名称。在这种情况下是这样的Query

完成此操作后,您可以将类型添加到服务器,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddGraphQLServer()
            .AddQueryType(d => d.Name("Query"))
                .AddTypeExtension<DogsQuery>()
                .AddTypeExtension<CarsQuery>();
}
Run Code Online (Sandbox Code Playgroud)

您可以在 Github 上的研讨会示例中找到此内容以及许多其他有用的内容: https: //github.com/ChilliCream/graphql-workshop