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

时间:2019-04-02 11:08:32

标签: graphql graphql-js

我正在学习GraphQL,偶然发现了 Operation Arguments GraphQL变量之间的区别。由于IMO 两者都提供,即客户端,因此将动态数据传递给突变或查询等的功能

有人可以启发我吗?

干杯!

1 个答案:

答案 0 :(得分:1)

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

可以将GraphQL架构中的每个

字段 配置为接受一个或多个参数。例如:

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

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

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

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

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

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

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

同样,参数仅提供一种更改请求执行方式的方法,而使用变量作为这些参数的输入将使特定查询变得动态且可重用。

请注意,您可以在客户端使用字符串连接或模板文字来实现与变量所做的相似的效果。但是,通常应该避免这样做,因为1)它不必要地为客户端增加了工作量; 2)自己对输入进行序列化,尤其是诸如输入对象类型之类的复杂输入,可能很快变得复杂且容易出错。