为啥 GraphQl 强制您匹配查询中的变量要求?

Posted

技术标签:

【中文标题】为啥 GraphQl 强制您匹配查询中的变量要求?【英文标题】:Why GraphQl force you to match the variables requirements on the queries?为什么 GraphQl 强制您匹配查询中的变量要求? 【发布时间】:2020-07-05 06:29:33 【问题描述】:

假设我的 GraphQl 服务器有一个这样定义的查询

query getUser(name: String!)

然后我进行这样的查询

query getUser(name: String) 
  getUser(name: $name)
...

我收到这样的错误

变量类型“字符串”与预期类型“字符串”不匹配!

为什么他试图匹配而不是检查值是否已经通过?我认为这是不必要的,并且出于愚蠢的原因迫使客户端应用程序进行更改。也许我在这里遗漏了一些东西。

【问题讨论】:

【参考方案1】:

! 表示类型不可为空。不可为空的参数不能被省略或传递 null 值。如果参数传递一个变量,则该变量的类型也必须是不可为空的。如果变量类型可以为空,则意味着null 将是变量的有效值,但null不是参数的有效值。

另一方面,类型为 可为空 的参数可以接受可为空或不可为空的变量,因为在可能值的范围内不存在不兼容性。

这是spec 的验证部分中的所有大纲。

【讨论】:

以上是关于为啥 GraphQl 强制您匹配查询中的变量要求?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 graphql 嵌套查询返回 null?

当我从 Angular 传递 graphql 查询时,为啥 GraphQL 控制器中的参数查询为空?

为啥 GraphQL `implements` 需要复制字段,这是强制性的吗?如果是,根本原因是啥?

为啥 WebStorm 在 Vue 组件或 .graphql 文件中的 apollo 对象内的 gql 查询中显示错误

React Native:为啥使用 Apollo 的 GraphQL 查询返回未定义?

我应该如何使用 Apollo Client 和 Link Rest 从 GraphQL 中的同一响应中查询和匹配数据?