操作参数和 GraphQL 变量有什么区别?

What's the difference between Operation Arguments and GraphQL variables?

我在学习 GraphQL 的过程中偶然发现了 操作参数 GraphQL 变量 之间的区别。因为 IMO,都提供,客户端,将动态数据传递给突变或查询等的设施

谁能教教我?

干杯!

参数和变量具有完全不同的功能。

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

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

此处 film 字段接受名为 id 的参数。 参数用于更改字段解析的值。在我们上面的示例中,服务器 returns 基于 id 的不同 Film 对象客户提供的价值。

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

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

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

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

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

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

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