首页 > 解决方案 > 操作参数和 GraphQL 变量有什么区别?

问题描述

我正在学习 GraphQL,偶然发现了Operation ArgumentsGraphQL variables之间的区别。因为 IMO都提供了客户端,将动态数据传递给突变或查询等的工具。

有人可以启发我吗?

干杯!

标签: graphqlgraphql-js

解决方案


参数和变量提供完全不同的功能。

GraphQL 模式中的每个字段都可以配置为接受一个或多个参数。例如:

query FilmQuery {
  film (id: "ZmlsbXM6MQ==") {
    id
    title
  }
}

这里该film字段接受一个名为 的参数id参数用于更改字段解析为的值。在上面的示例中,服务器根据客户端提供Film的值返回不同的对象。id

参数接受输入,可以是标量、枚举或更复杂的输入对象类型。在这里,我们将 String 值传递"ZmlsbXM6MQ=="给参数。通过写出查询中的值,我们说我们使用的是文字值

在查询中使用文字值并没有错,但是当传递给参数的值需要是动态的时,我们需要更多的东西——我们需要变量

变量允许我们参数化和重用查询。这是我们的示例,使用变量重写:

query FilmQuery($myId: ID!) {
  film (id: $myId) {
    id
    title
  }
}

作为操作定义的一部分,必须首先在文档顶部定义变量。在这里,我们定义了一个变量 ( $myId) 并告诉 GraphQL 它的类型是ID!。一旦定义,变量就可以在操作中的任何地方使用。当客户端实际向服务器发出请求时,文档中使用的任何变量的实际值必须与查询本身一起发送。

同样,参数只提供了一种更改请求执行方式的方法,而使用变量作为这些参数的输入是使特定查询动态和可重用的原因。

请注意,您可以在客户端使用字符串连接或模板文字来实现与变量类似的效果。但是,您通常应该避免这样做,因为 1) 它不必要地为客户端创建了额外的工作,以及 2) 自己序列化输入,尤其是像 Input Object Types 这样的复杂输入,很快就会变得复杂且容易出错。


推荐阅读