为啥 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 强制您匹配查询中的变量要求?的主要内容,如果未能解决你的问题,请参考以下文章
当我从 Angular 传递 graphql 查询时,为啥 GraphQL 控制器中的参数查询为空?
为啥 GraphQL `implements` 需要复制字段,这是强制性的吗?如果是,根本原因是啥?
为啥 WebStorm 在 Vue 组件或 .graphql 文件中的 apollo 对象内的 gql 查询中显示错误