
上QQ阅读APP看书,第一时间看更新
2.6.1 使用变量
前面的例子中,把参数的值直接写在了查询中。在实际开发中,很多有经验的读者可能已经想到,可以通过字符串模板技术来替换查询中的参数值来达到给后端发送动态参数的目的。不过在GraphQL中,还有另外一种做法,就是使用变量。
在使用变量前,首先需要声明变量的名字和类型。变量的名字由“$”字符打头,变量的类型可以是基本标量、自定义标量、枚举和输入类型,同样可以对变量的类型使用非空“!”限定符。具体代码如下:

需要注意的是变量声明的类型务必与使用变量所需要的类型一致。
动动手:把上面查询中$productID的类型改为String!,看看还会不会出错。
在查询中设置好变量后,就可以在发送查询的时候,额外指定一套变量的值。例如:

如果是在GraphiQL中发送查询,可以在网页的左下角找到一个叫“QUERY VARIABLES”的文本输入区。把所有用到的变量都放在一个JSON对象中传入即可。
动动手:请读者尝试把makeOrderV2中的order参数声明成一个变量。
还可以为变量指定默认值。如果客户端在发送查询时没有提供该变量的值,那么查询就会使用默认值。否则,查询就会使用客户端提供的变量值,而忽略默认值。代码如下:

需要注意的是非空类型变量不可以设置默认值。