如何在 GraphQL .Net GraphType First 中组织多个突变?
Posted
技术标签:
【中文标题】如何在 GraphQL .Net GraphType First 中组织多个突变?【英文标题】:How does one organize more than a few mutations in GraphQL .Net GraphType First? 【发布时间】:2021-02-20 01:52:19 【问题描述】:在 GraphQL .Net 中,大多数示例代码都有一个***突变图对象,其中定义了许多实际突变。 这是来自 GraphQL .NET mutations page 的示例:
public class StarWarsSchema : Schema
public StarWarsSchema(IServiceProvider provider)
: base(provider)
Query = provider.Resolve<StarWarsQuery>();
Mutation = provider.Resolve<StarWarsMutation>();
public class StarWarsMutation : ObjectGraphType
public StarWarsMutation(StarWarsData data)
Field<HumanType>(
"createHuman",
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<HumanInputType>> Name = "human"
),
resolve: context =>
var human = context.GetArgument<Human>("human");
return data.AddHuman(human);
);
当您有 1-5 个突变时,这似乎很好,但在一些较大的项目中加班可能会导致数十个突变。将它们放在一个大类中似乎就足够了,尽管似乎也缺少一些组织。我尝试将子突变 GraphTypeObject 放入父突变的字段中,但调用子突变时遇到了一些麻烦。可能是我配置错了。
这让我想知道,肯定有一个用户有十几个突变,他们可能已经组织了他们的突变,而不是将他们的所有突变放在一个***突变对象中。
【问题讨论】:
【参考方案1】:https://graphql-dotnet.github.io/docs/getting-started/query-organization
您可以通过添加***字段将查询或突变“分组”在一起。 “技巧”是在解析器中返回一个空对象。
public class StarWarsSchema : Schema
public StarWarsSchema(IServiceProvider provider)
: base(provider)
Query = provider.Resolve<StarWarsQuery>();
Mutation = provider.Resolve<StarWarsMutation>();
public class StarWarsMutation : ObjectGraphType
public StarWarsMutation(StarWarsData data)
Field<CharacterMutation>(
"characters",
resolve: context => new );
public class CharacterMutation : ObjectGraphType
public CharacterMutation(StarWarsData data)
Field<HumanType>(
"createHuman",
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<HumanInputType>> Name = "human"
),
resolve: context =>
var human = context.GetArgument<Human>("human");
return data.AddHuman(human);
);
这种组织体现在如何调用突变(或查询)。如果您只是希望它们在外部显示为一个平面列表(相当于一个巨大的文件),您还可以使用部分类将其分解为任意数量的文件。
【讨论】:
谢谢,这正是我想要的。以上是关于如何在 GraphQL .Net GraphType First 中组织多个突变?的主要内容,如果未能解决你的问题,请参考以下文章
在 GraphQL .NET 中,如何指定查询可以采用可选参数?
如何在 .Net 5 中使用 Hot Chocolate 在 GraphQL 中修改响应 Cookie