1. 课程概述和设置
5m

👋 欢迎来到 TypeScript 版 GraphQL 联合!

我们很高兴你能加入我们的这个课程,加入我们的 和 TypeScript 系列课程。

我们准备基于 基础进行构建,并深入探讨可扩展的联合架构。在本课程中,我们将学习被称为 超级图 的组件,它也被称为联合 架构。我们还有很多动手操作的机会,在现有的 GraphQL API 之上构建新功能。我们将使用一些主要的 组件来安全地发布这些更改: rover dev

让我们开始吧!

从 GraphQL API 开始

首先,让我们看看单个 API 是如何工作的。

A GraphQL server receives requests from clients and resolves them

当客户端需要一些数据时,它会发送一个 。服务器使用其架构、 来检索和解析这些数据,然后将其发送回客户端。这是一次很棒的体验!

这种设置适用于较小的项目或团队,但是当我们的 API 增长时会发生什么?当越来越多的团队开始向我们的架构添加类型、 和功能时,我们的 API 变得越来越难以管理、扩展和部署。这是单体后端服务的常见瓶颈问题。

介绍联合

为了解决这个问题,我们可以将 API 的功能划分为多个基于 的微服务,每个微服务负责 API 架构的不同部分。当我们采用这种 联合架构 时,我们的每个微服务都称为 子图,它们共同构成了我们 超级图 的基础。

An illustration of two subgraphs, with each subgraph having its own schema file, resolvers and data sources.

随着我们 的增长,它可以包含一个、两个甚至两百个 !这完全取决于我们想要如何划分我们的功能和能力,以帮助我们的团队构建和协作。

如果我们把 API 的功能拆分成很多不同的微服务,客户端如何跨所有这些微服务进行 ?为此,我们需要我们 的另一个部分: 路由器

了解我们所有 ,并且它还知道 API 架构中每个 应该由哪个子图负责。客户端将查询发送到路由器,路由器会智能地将它们拆分到相应的子图中。

The journey of a GraphQL operation, in a supergraph with the router and subgraphs

充当我们 API 的单一访问点,有点像 API 网关。由于路由器管理 如何 路由和解析请求,客户端无需担心与我们单独的 通信!

按照这种方法,我们可以扩展 API 以包含许多 和服务:所有功能都统一在一个智能的 背后。

为什么要使用联合?

使用 架构,从客户端的角度来看,没有任何变化。它们仍然与单个 端点( )进行通信,并且它们不需要了解图在幕后是如何构建的。

在后端 API 端,我们有明确的关注点分离。通过将架构拆分成 ,后端团队可以独立地工作在自己的子图上,而不会影响在其他子图上工作的开发人员。并且,由于每个子图都是一个单独的服务器,团队可以灵活地选择最适合他们的语言、基础设施和策略。

我们正在构建什么

在学习和练习这些联合概念时,我们将构建我们的课程项目: 气闸

The Airlock app homepage with a list of places to book.

气闸是一个星际旅行预订应用程序:我们可以用它来找到一个宇宙中开放空间中酷炫的住宿地点!我们已经在 listings 服务器中构建了起点,它位于 TypeScript 版 GraphQL 入门课程 中。在本课程中,我们将使用一些新的重要数据来增强我们的房源:评论。在预订旅行之前,查看其他旅行者对住宿的评价——毕竟,口碑是最好的营销形式。

项目设置

要跟随课程学习,您需要具备以下内容

先决条件

我们假设您熟悉 概念,例如类型、查询和 。如果您需要复习,请查看我们的 TypeScript 版 GraphQL 入门课程

您还应该熟悉 TypeScript 编程概念

注意: 我们还提供本课程的 Java with DGSC# with Hot Chocolate 版本。

代码编辑器或 IDE

我们使用 VS Code

许多流行的 IDE 都提供插件,这些插件可以启用 语法高亮。对于 VS Code,我们推荐 GraphQL: 语法高亮扩展

克隆存储库

让我们设置好代码。

打开一个终端,指向一个新目录,并运行以下命令

git clone https://github.com/apollographql-education/odyssey-federation-typescript.git

以下是项目结构: listings 目录提供我们所有房源数据。 router 目录目前包含一个名为 router-config.yaml 的文件。我们将在后面的课程中讨论该目录的作用。

📦 odyssey-federation-typescript
┣ 📂 router
┃ ┗ 📄 router-config.yaml
┗ 📂 listings

运行应用程序

最后,让我们启动 listings 服务器。

在终端中导航到 listings 目录,并运行以下命令。

首先,安装软件包

./listings
npm install

接下来,启动服务器

./listings
npm run dev

不久之后,我们应该在终端中看到应用程序正在运行!

🚀 Server is running
📭 Query at https://127.0.0.1:4000/

检查点

设置清单

注册一个带有企业计划的 Apollo GraphOS 账户

本课程使用 (下一课将详细介绍!),这需要一个带有 的 Apollo 账户。如果您的组织使用的是其他计划,您仍然可以继续学习,但无法完成某些动手任务。您也可以通过 注册免费企业试用 来测试此功能。

任务!

Rover 设置

是 Apollo 的命令行界面 (CLI) 工具,可帮助开发人员使用 并与 交互。它是一个方便且用途广泛的工具,可用于本地开发和 CI/CD。

在接下来的课程中,我们将使用 在发布本地更改之前对其进行验证。

安装 Rover

是 Apollo 的命令行界面 (CLI) 工具,可帮助开发人员使用 并与 交互。

任务!

实践

以下哪些是使用 Apollo Federation 的优势?

关键要点

  • 联合是一种用于创建模块化 的架构,也称为 架构。
  • 一个 由一个或多个 组成。
  • 一个 是一个负责其自身域的 微服务。
  • 是管理请求如何路由和执行的单个端点,有点像 API 网关。

接下来

我们的列表渴望得到客人的评价!在下一课中,我们将迈出扩展 API 的第一步,并了解 的组成部分。

下一步

分享您对本课的疑问和评论

本课程目前处于

测试版
.您的反馈可以帮助我们改进!如果您遇到困难或困惑,请告诉我们,我们会帮助您。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已解决的评论可能会被删除。

您需要一个 GitHub 帐户才能在下面发布。还没有吗? 改为在我们的 Odyssey 论坛中发布。