理解 GraphQL 变量,它们如何工作以及如何在标量和对象之间进行转换

阅读时长 4 分钟读完

GraphQL 是一种用于 API 的查询语言。它允许客户端应用程序精确地指定它们所需的数据,并且能够减少数据传输的量。此外,GraphQL 还支持使用变量。接下来,我们将详细探讨 GraphQL 变量是什么,以及它们如何在标量和对象之间进行转换。

什么是 GraphQL 变量?

GraphQL 变量用于在查询中传递参数,从而减少代码中出现的硬编码常量。这些常量可以是字符串、数值、枚举值或对象。变量使用 $ 符号进行声明,并且在进行查询时会在变量声明中传递。

下面是一个简单的查询和变量声明的示例:

在这个查询中,我们声明了一个名为 userProfile 的查询,变量名为 userId,类型为 ID! 表示这是一个必需变量,不能忽略。在查询执行时,我们会将实际的值传递给变量,并最终返回用户的名称和电子邮件。

标量和对象之间的变量转换

GraphQL 变量可以用于在标量和对象之间进行转换。这对于定义嵌套的输入类型和查询参数非常有用。

接下来,我们将看一下在标量和对象之间进行转换的示例。

将标量转换为对象变量

假设我们有一个数据模型,其包含两个对象类型:用户和文章。我们要创建一个新的文章,并将它分配给特定用户。下面是一个用于创建文章的标量变量的查询示例:

-- -------------------- ---- -------
-------- --------------------- -------- --------- -------- -------- -------- -
  -------------------- -
    ------ -------
    -------- ---------
    ------- -------
  -- -
    -----
    ---- -
      ----
      -----
    -
  -
-
展开代码

在这个查询中,我们使用三个字符串类型的变量 titlecontentuserId。但是,我们还需要将文章分配给特定的用户。为了做到这一点,我们需要将 userId 转换为一个 UserInput 类型的对象变量。UserInput 类型由 name 和 email 字段组成,因此可以在前端应用程序中轻松构建。

下面是一个使用对象变量的示例:

-- -------------------- ---- -------
-------- --------------------- -------- --------- -------- ------ ----------- -
  -------------------- -
    ------ -------
    -------- ---------
    ----- -----
  -- -
    -----
    ---- -
      ----
      -----
    -
  -
-
展开代码

我们将 userId 变量转换为 user 对象变量。现在,$user 变量需要一个包含 two 字段的对象,这两个字段是我们在 UserInput 类型中定义的字段。这使得我们更容易将 用户信息 嵌入到我们的查询中。

将对象转换为标量变量

我们也可以将嵌套对象转换为标量变量。假设我们要按用户名筛选文章,我们可以编写以下查询:

-- -------------------- ---- -------
----- -
  ---------------- -
    ----- -
      ----- ----- ----
    -
  -- -
    -----
    ---- -
      ----
    -
  -
-
展开代码

但是,将这个查询的用户对象转换为标量变量会更好。为此,我们需要将参数对象提取出来,并将其转换为我们现有的变量。

下面是对象变量和标量变量之间的转换示例:

-- -------------------- ---- -------
----- ----------- -------- -
  ---------------- -
    ----- -
      ----- ---------
    -
  -- -
    -----
    ---- -
      ----
    -
  -
-
展开代码

在这个查询中,我们将 user 对象转换为一个字符串类型的 userName 变量。现在,我们可以使用 $userName 在查询中动态地筛选文章。

结束语

GraphQL 变量是一个非常强大的特性。使用变量,我们可以轻松传递参数,减少硬编码常量的使用,并在标量和对象之间进行转换。在实际应用程序中,这些操作都是必需的。希望本文能够帮助你更好地理解 GraphQL 变量,并使用它们来构建更强大的查询。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67865c8b4083a4caeef0f22e

纠错
反馈

纠错反馈