用 Apollo Federation 整合多个 GraphQL 服务

阅读时长 6 分钟读完

GraphQL 是一种颇受欢迎的 API 查询语言,已被广泛应用于前端开发。但是对于大型应用程序来说,GraphQL 的扩展性可能会受到限制,特别是当需要整合多个 GraphQL 服务时。这时就需要一款能够把多个 GraphQL 服务整合在一起的工具,Apollo Federation 就是这样的一款工具。

Apollo Federation 简介

Apollo Federation 是一个能够整合各种 GraphQL 服务的统一 API 网关。通过 Apollo Federation,您可以把多个 GraphQL 服务集成在一起,形成一个整体的 API,从而更好地扩展和维护您的应用程序。

通过 Apollo Federation,开发人员无需考虑如何将数据从多个 GraphQL 服务中整合到一个 API 中,只需要像平常一样编写 GraphQL 模式即可。Apollo Federation 会自动整合模式和查询,并把结果集整合成一个整体的响应。

如何使用 Apollo Federation 整合多个 GraphQL 服务

使用 Apollo Federation 整合多个 GraphQL 服务非常简单,只需要遵循下面几个步骤:

  1. 创建 Gateway 服务

首先,您需要创建一个 Gateway 服务,该服务将作为整个 API 的入口点。Gateway 服务负责聚合多个 GraphQL 服务,并将它们整合到一个整体的 API 中。Apollo 提供了一个 apollo-server 包,您可以使用该包创建一个 Gateway 服务。示例代码如下:

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

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

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

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

上面这段代码创建了一个 Gateway 服务,该服务会聚合名为 accountsreviews 的两个 GraphQL 服务,并将它们整合到一个整体的 API 中。

  1. 创建实现服务

接下来,您需要创建多个实现服务。实现服务是 Gateway 服务聚合的 GraphQL 服务。每个实现服务都定义了一部分 API,它们在 Gateway 服务上合并成一个整体的 GraphQL API。使用 Apollo Federation,开发人员可以独立地开发和部署每个实现服务,Gateway 服务会按需调用它们。

以下是一个简单的示例代码,用于创建名为 accounts 的实现服务:

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

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

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

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

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

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

该示例代码创建了一个实现服务,该服务只有一个查询 me,该查询将返回一个名为 Doe 的用户。

  1. 创建其他实现服务

您可以创建多个实现服务,只需编写相应的模式和解析器。每个实现服务负责实现一部分 API 的功能,并使 Gateway 能够访问这些功能。

在上面的示例中,只有一个实现服务。您可以添加其他实现服务,例如一个名为 reviews 的实现服务。下面是一个示例代码,用于创建该实现服务:

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

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

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

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

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

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

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

该示例代码创建了一个名为 reviews 的实现服务,该服务定义了一个查询 reviews,该查询将返回一个包含单个评论的评论数组。

总结

Apollo Federation 提供了一个非常简单的方式,用于将多个 GraphQL 服务整合到一个整体的 API 中。使用 Apollo Federation,开发人员可以独立地编写和部署每个 GraphQL 服务,并使其能够聚合在一起。如果您正在开发一个大型应用程序并且需要整合多个 GraphQL 服务,请考虑使用 Apollo Federation。

完整示例代码请参见 这里

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

纠错
反馈