允许哪些类型的 GraphQL 变量?

Posted

技术标签:

【中文标题】允许哪些类型的 GraphQL 变量?【英文标题】:What types of GraphQL variable are allowed? 【发布时间】:2017-12-26 00:31:15 【问题描述】:

GraphQL 的常见做法,尤其是在 HTTP 上,有一个 query 参数、一个可选的 operationName 和一个提供 variables 的可选 JSON 对象。

我见过的variables参数的所有例子都是简单的JSON对象:


  "var1": "value1",
  "var2": 2

每个键都有一个简单的 JSON 类型值,例如数字或字符串。

GraphQL 变量值是否可以比这更广泛,更深入地混合数组和对象?


  "var1": "value1",
  "var2": 
    "name": "My Name",
    "numbers": [1, 5, 11, 10]
  

【问题讨论】:

【参考方案1】:

当然,但是,您会希望我确保您的架构中有匹配的输入类型。因此,要接受具有类似var2 中的结构的输入,您需要这样的东西:

input VarInput 
  name: String
  numbers: [Int]

然后,对于查询/突变的类型定义...

type Query 
  foo (var1: String, var2: VarInput): Foo

然后您的解析器可以像任何其他参数一样获取var2

【讨论】:

感谢您的回答 - 我愿意接受它是正确的。不过,我想知道您是否有更多关于服务器如何将变量强制转换为 GraphQL 类型的信息? @BenCox 无论您使用什么 GraphQL 实现,都将再次根据您通过模式中的类型定义提供的信息,将输入解析为正确的类型。如果这是您所要求的,则服务器端不需要额外的步骤。

以上是关于允许哪些类型的 GraphQL 变量?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL Connections for Relay 中的光标都有哪些限制?

我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq

在 GraphQL 对象查询中使用变量

带有官方 Graphql 教程的“无法在 CreateUser 类型上查询字段 'id'”

Apollo GraphQL:用于查询返回不同类型对象的模式?

运行突变以存储新用户的帖子返回错误:变量“$data”类型的预期值