【问题标题】:How does one organize more than a few mutations in GraphQL .Net GraphType First?如何在 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 放入父突变的字段中,但调用子突变时遇到了一些麻烦。可能是我配置错了。

这让我想知道,肯定有一个用户有十几个突变,他们可能已经组织了他们的突变,而不是将他们的所有突变放在一个顶级突变对象中。

如何在 GraphQL .Net GraphType First 中组织多个突变?

【问题讨论】:

    标签: graphql graphql-dotnet graphql.net


    【解决方案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);
          });
      }
    }
    

    这种组织体现在如何调用突变(或查询)。如果您只是希望它们在外部显示为一个平面列表(相当于一个巨大的文件),您还可以使用部分类将其分解为任意数量的文件。

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 2019-01-24
    • 2020-02-03
    • 2022-08-13
    • 1970-01-01
    • 2017-10-09
    • 2021-11-20
    • 2019-05-24
    • 2020-07-30
    • 2019-02-21
    相关资源
    最近更新 更多