为什么 GraphQl 强制您匹配查询的变量要求?

San*_*ida 5 graphql apollo-server apollo-client

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

query getUser(name: String!)
Run Code Online (Sandbox Code Playgroud)

然后我进行这样的查询

query getUser(name: String) {
  getUser(name: $name)
...
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误

变量类型“String”与预期类型“String!”不匹配

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

Dan*_*den 4

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

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

这是规范验证部分中的所有概述。