Mutation 的 GraphQL 输入类型声明

Posted

技术标签:

【中文标题】Mutation 的 GraphQL 输入类型声明【英文标题】:GraphQL Input type declaration for Mutation 【发布时间】:2021-11-25 19:51:23 【问题描述】:

我是 GraphQL 的新手,经过一些编码后,我遇到了一个问题,即为 Mutation 声明输入类型。 这是我的架构:

type Test 
  id: ID!
  label: String!


extend type Query 
  test(id : ID!): Test
  listTests (where: myWhereCondition, orderBy: myOrderByCondition): [Test!]!


extend type Mutation 
  createTest(label: String!, testTypes: TestTypesInput): Test!


input TestTypesInput 
  testTypes: [IdInput]


input IdInput 
  id: ID!

当我运行我的应用程序时,我得到了错误

原因:graphql.kickstart.tools.SchemaError:预期类型 'IdInput' 是一个 GraphQLInputType,但它不是!只是一个类型 允许错误地用作输入类型的对象类型,或 反之亦然?在 graphql.kickstart.tools.SchemaParser.determineType(SchemaParser.kt:400) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.determineInputType(SchemaParser.kt:417) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.determineInputType(SchemaParser.kt:410) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.createInputObject(SchemaParser.kt:179) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.parseSchemaObjects(SchemaParser.kt:79) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.makeExecutableSchema(SchemaParser.kt:112) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration.graphQLSchema(GraphQLJavaToolsAutoConfiguration.java:143) ~[graphql-kickstart-spring-boot-autoconfigure-tools-11.1.0.jar:na]

我不明白我错过了什么,对我来说,“IdInput”被很好地声明为input 并且阅读了一些其他示例,它看起来对我来说是正确的,但显然不是。我试图将 che IdInput 声明为 type insted of input,但它显然不起作用。如何将输入对象列表传递到输入数组中? 如果您需要更多信息,我会添加它们,目前我只是混合一些声明以提出正确的声明,但没有成功。 提前感谢您的帮助!

【问题讨论】:

架构对我来说看起来不错,错误一定来自其他地方。也许IdIntput 声明为type 在您的架构中的其他地方?您确定失败来自您共享的代码吗?您是否尝试过简单的突变,例如test(id: IdInput) ID,看看能不能通过? 你是对的,它来自其他地方:在 Mutation 解析器中,我在方法的签名中声明了错误的 TestTypesInput。实际上,我并没有更改它,因为我看到了这个错误并专注于 GraphQL 架构,认为问题就在那里,一旦修复,我就可以相应地设置方法的签名。发现真的很失望。感谢您的宝贵时间! 别担心,很高兴你发现了 :) 【参考方案1】:

发现这是一个误导性错误,因为 GraphQL 架构无法使用 Mutation Resolver 的签名方法获取。它没有指出那部分,而是不断地打破 GraphQL Schema 声明。 一旦根据 Schema 声明了签名方法,一切都像魅力一样。 希望它可以帮助处理这种误导性错误的人。

【讨论】:

以上是关于Mutation 的 GraphQL 输入类型声明的主要内容,如果未能解决你的问题,请参考以下文章

紧跟在查询类型(query/mutation)GraphQL之后的字符串的意义

如何从 GraphQL Mutation 返回 Union 类型

类型 GraphQL 如何避免创建未输入的字段

具有“自定义类型”属性的DynamoDB表的Graphql Mutation查询

Angular Apollo:错误:GraphQL 错误:“Mutation”类型的字段“AuthLogin”上的未知参数“用户名”

GraphQL 错误:输入类型中未定义字段