HotChocolate Stitching 如何从突变中删除参数?

问题描述

我有一个使用 HotChocolate 11 实现的 GraphQL api。模式最近发生了变化,我想使用我们的拼接层来为客户端保持不变。 我有一个看起来像这样的突变:

type Mutation {
  generate(apertures: [ApertureInput!]! templates: [TemplateInput!]!): [GeneratedApertures!]!
}

我不得不再添加一个参数,我们还添加了一个查询来获取额外的数据

type Mutation { 
  generate(apertures: [ApertureInput!]! templates: [TemplateInput!]! algorithm: AlgorithmInput!): [GeneratedApertures!]!
}

type Query {
 standardAlgorithm: StandardAlgorithm
}

type StandardAlgorithm {
 shrink: Int!
}

我想要做的是使用我们的拼接层添加突变的旧签名,并在解析器中调用远程模式来获取附加数据并将其传递给新的突变。 我在针脚上重命名了新签名并创建了一个看起来像旧签名的突变:

extend type Mutation {
   product_generate(apertures: [ApertureInput!]! templates: [TemplateInput!]! algorithm: AlgorithmInput!): GeneratedApertures!
     @source(name: "generate" schema: "productdefinition") 
     @delegate(schema: "productdefinition")
   generate(apertures: [ApertureInput!]! templates: [TemplateInput!]!): GeneratedApertures!
}

但是我迷失了使用拼接上下文来构建子查询。

    public class GenerationMutationTypeExtension : ObjectTypeExtension
    {
        protected override void Configure(IObjectTypeDescriptor descriptor)
        {
            descriptor.Name("Mutation");
            descriptor.Field("generate")
                      .Resolve(async ctx => {
                          var context = ctx.Service<IStitchingContext>();
                          var executor = context.GetRemoteRequestExecutor("productdefinition");
                          var request =
                              QueryRequestBuilder.New()
                                                 .SetQuery("{ standardAlgorithm { shrink } }")
                                                 .SetServices(executor.Services)
                                                 .Create();

                          var result = (QueryResult)await executor.ExecuteAsync(request);
                          var template = result.Data?["standardTemplate"];
                          if (template is NullValueNode || template is null) throw new GraphQLRequestException("Missing configuration!!!");

                          var shrink = (string)((IValueNode)((Dictionary<string,object>)template)["shrinkPercent"]).Value;

                          var apertures = ctx.ArgumentLiteral<IValueNode>("apertures");
                          var templates = ctx.ArgumentLiteral<IValueNode>("templates");
                          var selection = ctx.Selection.SyntaxNode.SelectionSet;

                          var query =
                              $"{{ product_generateDeposits(apertures: {apertures} templates: {templates} algorithm: {{ standardAlgorithm: {{ shrink: {shrink} }} }}) {selection} }}";
                          request =
                              QueryRequestBuilder.New()
                                                 .SetQuery(query)
                                                 .SetServices(executor.Services)
                                                 .Create();
                          result = (QueryResult)await executor.ExecuteAsync(request);
                          return result;
                      });
        }
    }

收缩的第一个查询工作正常,我得到了数据。但是我很难将另一个突变放在一起。有没有更好的方法来实现这一目标?在拼接方面,文档非常模糊。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...