8. 存根子图
4m

概述

在本课中,我们将

  • 设置和发布存根
  • 设置本地开发环境

✏️ 设置accounts 存根子图

每个 都将位于其自己的文件夹中,并以 subgraph-为前缀。我们看到,入门存储库中已有一个名为 subgraph-template的文件夹。此 subgraph-template 文件夹包含设置 所需的所有文件和样板代码!

📂 subgraph-template
┣ 📂 datasources
┣ 📄 index.js
┣ 📄 package.json
┣ 📄 resolvers.js
┗ 📄 schema.graphql

此模板包含一个 存根子图:一个空的 配备了启动和运行的绝对最低限度需求。

让我们看一下 schema.graphql 文件。

subgraph-template/schema.graphql
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.7"
import: ["@key", "@shareable", "@inaccessible"]
)
type Query {
_todo: String @shareable @inaccessible
}

我们在顶部可以看到联合定义,以及 2 个新的 @shareable@inaccessible。这两个 使我们能够添加一个任意 (Query._todo)。此 不可用于 (它是 @inaccessible!),可以在其他 中进行定义 (它是 @shareable)。此基本的模式让我们可以旋转出任意多的存根 ,根据我们的需要;但让我们先从一个开始。

  1. 复制 subgraph-template 文件夹到存储库的根目录并重命名文件夹为 subgraph-accounts

  2. 打开 index.js 文件。我们需要填写 portsubgraphName

    accounts 应当在端口 4002 上运行。

    subgraph-accounts/index.js
    const port = 4002;
    const subgraphName = "accounts";

    我们稍后会填写 TODO 的最后一个 dataSources

  3. 在新的终端中,导航至 subgraph-accounts 目录。

    cd subgraph-accounts
  4. 安装软件包。

    npm install
  5. 使用 npm start 运行服务器。

    npm start
任务!

你现在应该能够 sandbox 中的以下内容 https://127.0.0.1:4002

query {
_todo # returns "TODO". This field will be inaccessible from the router
}

发布 accounts 存根子图

以一个空的存根 开始,让我们在迁移 时能重新开始并捕获任何 错误。

注意:这还是设置 和在 的 CI/CD 管道中部署的好时机。我们将在航程 III 中解决这些问题。

为了发布我们的 accounts ,我们将使用 rover subgraph publish 命令与相应的值。由于这是我们第一次发布 accounts ,我们还需要添加 routing-url。(我们的 在本地运行,因此确保指定 http 而不是 https!)

rover subgraph publish <APOLLO_GRAPH_REF> \
--schema ./subgraph-accounts/schema.graphql \
--name accounts \
--routing-url https://127.0.0.1:4002

请记住,将 <APOLLO_GRAPH_REF> 值替换为您自己的值,并且请注意,我们正在项目的根目录中运行此命令。

成功发布后,我们可以前往 Studio 中的 子图 页面,查看我们的新 accounts 正在增长!

Studio Subgraphs page showing the accounts subgraph added to the list

任务!

设置本地超图开发环境

现在我们有 两个 参与其中,我们需要一种方法来查看我们的架构更改在本地迁移时产生的结果 ,并在进行时捕获任何 错误。 提供了一个 开发工具,其中包含称为 rover dev,它帮助我们完成此操作。

我们将为 rover dev 提供 配置的所有详细信息(每个 的所有详细信息,如其名称、架构以及运行位置)以及我们的 配置(例如应传播哪些标头)。这两个配置都可以在 router 目录中找到,分别位于 supergraph-config.yamlrouter-config.yaml 中。随时查看!

注意:在开始之前,确保monolithaccounts 在运行,以及服务(npm run launchmonolith目录中)。

  1. 如果你的仍然在运行,现在就停止它。

  2. 在服务器目录的根目录打开一个新的终端窗口。

  3. 运行rover dev命令,传入配置文件。

    rover dev --supergraph-config ./router/supergraph-config.yaml \
    --router-config ./router/router-config.yaml
  4. 我们将在终端中获得几行输出

    ⚠️ Do not run this command in production! ⚠️ It is intended for local development.
    🛫 starting a session with the 'monolith' subgraph
    🛫 starting a session with the 'accounts' subgraph
    🎶 composing supergraph with Federation v2.8.0
    🚀 your supergraph is running! head to https://127.0.0.1:4000 to query your supergraph
    👀 watching ./monolith/schema.graphql for changes
    🎶 composing supergraph with Federation v2.8.0
    ✅ successfully composed after adding the 'accounts' subgraph
    👀 watching ./subgraph-accounts/schema.graphql for changes

为我们启动了一个本地 ,在localhost:4000上运行,并提取我们的本地架构。

请注意,这不同于我们本课程前面运行的“生产”,它提取了由识别的托管在中的架构。

我们已经设置了本地开发;让我们继续实施计划!

accounts子图中有什么?

accounts 将负责与账户和用户、登录详细信息和用户档案相关的所有事项。

花点时间查看monolith/schema.graphql文件并回答以下问题:

  • 哪些实体属于accounts
  • 哪些 在这些实体中属于 Accounts
  • 哪些 QueryMutation 类型中属于 accounts

准备就绪后,将您的列表与我们的列表进行比较!

下面列出了各种类型及其对应的 ,这些对于 Accounts 处理以下内容是必不可少的:

Diagram to display the fields above
  • User 界面,包含 idnameprofilePicture
  • Host 类型,包含 idnameprofilePictureprofileDescription
  • Guest 类型,包含 idnameprofilePicture
  • Query.user
  • Query.me
  • Mutation.updateProfile
  • updateProfile 使用的类型: UpdateProfileInputUpdateProfileResponseMutationResponse

实践

以下哪项是 rover dev 进行的操作?

重点要点

  • 一个存根是一个空子图,配备了启动并使其运行所需的最低必要配置。它使我们能够从一个干净的状态开始,使用来设置任何 CI/CD 管道并逐步进行模式迁移。
  • rover dev通过在本地编写我们的并在本地启动一个来帮助我们进行本地开发。

下一步

我们准备开始迁移!让我们了解@override ,以帮助我们使这种迁移顺利进行。

上一个

与他人分享对本课的疑问和评论

您的反馈有助于我们改进!如果您遇到阻碍或感到困惑,请告诉我们,我们会帮助您。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已解决或已处理的评论可能会被移除。

您需要一个 GitHub 帐户才能在下方发表评论。没有帐户? 在我们的 Odyssey 论坛中发帖。