如何在 GraphQL 中使用联合类型

GraphQL 是一种用于 API 的查询语言,它允许客户端指定所需的数据,并且只返回客户端需要的数据。GraphQL 中的联合类型是一种特殊的类型,它允许我们将不同的类型组合在一起,以便查询结果可以包含多种类型的数据。在本文中,我们将介绍如何在 GraphQL 中使用联合类型,并提供示例代码。

什么是联合类型

在 GraphQL 中,联合类型是一种特殊的类型,它允许我们将多种类型组合在一起。例如,我们可以将 PersonAnimal 这两种类型组合在一起,创建一个 SearchResult 的联合类型,以便我们可以在搜索结果中返回这两种类型的数据。

----- ------------ - ------ - ------

---- ----- -
  ------------- --------- ----------------
-

---- ------ -
  ----- -------
  ---- ----
-

---- ------ -
  ----- -------
  -------- -------
-

在上面的例子中,SearchResult 是一个联合类型,它可以是 PersonAnimal。我们定义了一个 search 查询,它将返回一个 SearchResult 类型的数组。

如何使用联合类型

在 GraphQL 中,我们可以使用 __typename 字段来获取查询结果的类型。例如,在上面的例子中,如果我们查询了 search,我们可以使用以下代码来获取查询结果的类型:

----- -
  ------------- ------- -
    ----------
    --- -- ------ -
      ----
      ---
    -
    --- -- ------ -
      ----
      -------
    -
  -
-

在上面的代码中,我们使用了 ... on 语法来根据 __typename 字段的值来选择要查询的字段。如果查询结果是 Person 类型,我们将返回 nameage 字段;如果查询结果是 Animal 类型,我们将返回 namespecies 字段。

示例代码

下面是一个完整的示例代码,它演示了如何在 GraphQL 中使用联合类型:

---- ------ -
  ----- -------
  ---- ----
-

---- ------ -
  ----- -------
  -------- -------
-

----- ------------ - ------ - ------

---- ----- -
  ------------- --------- ----------------
-

------ -
  ------ -----
-
----- - ------------ - - ------------------------

----- ------ - -
  - ----- ------- ---- -- --
  - ----- ------- ---- -- --
-

----- ------- - -
  - ----- -------- -------- ----- --
  - ----- ----------- -------- ----- --
-

----- --------- - -
  ------ -
    ------- --- - ----- -- -- -
      ----- ------- - ----------- ----------------------- --
        -----------------------------------------------------
      -
      ------ -------
    --
  --
  ------------- -
    -------------- --- -- -
      -- ------ -- ---- -
        ------ --------
      -
      -- ---------- -- ---- -
        ------ --------
      -
      ------ ----
    --
  --
-

----- ------ - --- --------------
  --------- -------------------
  ----------
--

----------------------- --- -- -- -
  ------------------- ----- -- --------
--

在上面的代码中,我们定义了 PersonAnimal 两种类型,并创建了一个 SearchResult 的联合类型。我们还定义了一个 search 查询,它将返回一个 SearchResult 类型的数组。

resolvers 中,我们实现了 search 查询的解析器,并且在 SearchResult 类型中定义了一个 __resolveType 函数,用于确定查询结果的类型。

最后,我们创建了一个 Apollo Server,并将 GraphQL schema 和 resolvers 传递给它。我们可以在浏览器中访问 GraphQL Playground,并执行以下查询:

----- -
  ------------- ------- -
    ----------
    --- -- ------ -
      ----
      ---
    -
    --- -- ------ -
      ----
      -------
    -
  -
-

查询结果如下:

-
  ------- -
    --------- -
      -
        ------------- ---------
        ------- -------
        ------ --
      --
      -
        ------------- ---------
        ------- --------
        ---------- -----
      -
    -
  -
-

结论

在 GraphQL 中,联合类型是一种非常有用的类型,它允许我们将多种类型组合在一起,以便查询结果可以包含多种类型的数据。在本文中,我们介绍了如何在 GraphQL 中使用联合类型,并提供了示例代码。希望本文对您有所帮助,谢谢阅读!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673dba4690e7ed93bee02572