[英]What's the difference between Operation Arguments and GraphQL variables?
我正在学习 GraphQL 并且偶然发现了Operation Arguments和GraphQL variables之间的区别。 因为 IMO都为客户端提供了将动态数据传递给突变或查询等的工具。
有人可以启发我吗?
干杯!
参数和变量提供完全不同的功能。
GraphQL 模式中的每个字段都可以配置为接受一个或多个参数。 例如:
query FilmQuery {
film (id: "ZmlsbXM6MQ==") {
id
title
}
}
这里的film
字段接受一个名为id
的参数。 参数用于更改字段解析为的值。 在我们上面的例子中,服务器根据客户端提供的id
值返回一个不同的Film
对象。
参数接受输入,可以是标量、枚举或更复杂的输入对象类型。 在这里,我们将"ZmlsbXM6MQ=="
的字符串值传递给参数。 通过写出查询中的值,我们说我们使用的是文字值。
在查询中使用文字值并没有错,但是当传递给参数的值需要是动态的时,我们需要更多的东西——我们需要变量。
变量允许我们参数化和重用查询。 这是我们的示例,使用变量重写:
query FilmQuery($myId: ID!) {
film (id: $myId) {
id
title
}
}
变量必须首先在文档顶部定义,作为操作定义的一部分。 这里我们定义了一个变量( $myId
)并告诉 GraphQL 它的类型是ID!
. 一旦定义,变量就可以在操作中的任何地方使用。 当客户端实际向服务器发出请求时,文档中使用的任何变量的实际值必须与查询本身一起发送。
同样,参数仅提供了一种更改请求执行方式的方法,而使用变量作为这些参数的输入使特定查询变得动态和可重用。
请注意,您可以在客户端使用字符串连接或模板文字来实现与变量类似的效果。 但是,您通常应该避免这样做,因为 1) 它为客户端创建了不必要的额外工作,以及 2) 自己序列化输入,尤其是像输入对象类型这样的复杂输入,很快就会变得复杂且容易出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.