【发布时间】:2019-08-23 16:37:28
【问题描述】:
我正在学习 GraphQL,偶然发现Operation Arguments和GraphQL variables之间的区别。因为 IMO,都提供客户端,将动态数据传递到突变或查询等的设施。
有人可以启发我吗?
干杯!
【问题讨论】:
标签: graphql graphql-js
我正在学习 GraphQL,偶然发现Operation Arguments和GraphQL variables之间的区别。因为 IMO,都提供客户端,将动态数据传递到突变或查询等的设施。
有人可以启发我吗?
干杯!
【问题讨论】:
标签: graphql graphql-js
参数和变量提供完全不同的功能。
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) 自己序列化输入,尤其是像 Input Object Types 这样的复杂输入,很快就会变得复杂且容易出错。
【讨论】: