概述
在本课中,我们将
- 设置和发布存根子图
- 设置本地超级图开发环境
✏️ 设置accounts
存根子图
每个 子图都将位于其自己的文件夹中,并以 subgraph-
为前缀。我们看到,入门存储库中已有一个名为 subgraph-template
的文件夹。此 subgraph-template
文件夹包含设置 Apollo Server 子图 所需的所有文件和样板代码!
📂 subgraph-template┣ 📂 datasources┣ 📄 index.js┣ 📄 package.json┣ 📄 resolvers.js┗ 📄 schema.graphql
此模板包含一个 存根子图:一个空的 子图配备了启动和运行的绝对最低限度需求。
让我们看一下 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
)。此基本的模式让我们可以旋转出任意多的存根 子图,根据我们的需要;但让我们先从一个开始。
复制
subgraph-template
文件夹到存储库的根目录并重命名文件夹为subgraph-accounts
。打开
index.js
文件。我们需要填写port
和subgraphName
变量。accounts
子图应当在端口4002
上运行。subgraph-accounts/index.jsconst port = 4002;const subgraphName = "accounts";我们稍后会填写
TODO
的最后一个dataSources
。在新的终端中,导航至
subgraph-accounts
目录。cd subgraph-accounts安装软件包。
npm install使用
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
子图。 超图 正在增长!
设置本地超图开发环境
现在我们有 两个 子图 参与其中,我们需要一种方法来查看我们的架构更改在本地迁移时产生的结果 字段,并在进行时捕获任何 复合 错误。 GraphOS 提供了一个 超图 开发工具,其中包含称为 Rover 的 rover dev
,它帮助我们完成此操作。
我们将为 rover dev
提供 超图 配置的所有详细信息(每个 子图 的所有详细信息,如其名称、架构以及运行位置)以及我们的 路由器 配置(例如应传播哪些标头)。这两个配置都可以在 router
目录中找到,分别位于 supergraph-config.yaml
和 router-config.yaml
中。随时查看!
注意:在开始之前,确保monolith
和accounts
子图服务器在运行,以及服务(npm run launch
在monolith
目录中)。
如果你的路由器仍然在运行,现在就停止它。
在服务器目录的根目录打开一个新的终端窗口。
运行
rover dev
命令,传入配置文件。rover dev --supergraph-config ./router/supergraph-config.yaml \--router-config ./router/router-config.yaml我们将在终端中获得几行输出
⚠️ 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
Rover为我们启动了一个本地 路由器,在localhost:4000
上运行,并提取我们的本地架构。
请注意,这不同于我们本课程前面运行的“生产”路由器,它提取了由图参识别的托管在GraphOS中的架构。
我们已经设置了本地开发;让我们继续实施计划!
accounts
子图中有什么?
该accounts
子图将负责与账户和用户、登录详细信息和用户档案相关的所有事项。
花点时间查看monolith/schema.graphql
文件并回答以下问题:
- 哪些实体属于
accounts
子图? - 哪些 字段 在这些实体中属于
Accounts
子图? - 哪些 字段 在
Query
和Mutation
类型中属于accounts
子图?
准备就绪后,将您的列表与我们的列表进行比较!
下面列出了各种类型及其对应的 字段,这些对于 Accounts
子图 处理以下内容是必不可少的:
User
界面,包含id
、name
和profilePicture
Host
类型,包含id
、name
、profilePicture
和profileDescription
Guest
类型,包含id
、name
和profilePicture
Query.user
Query.me
Mutation.updateProfile
- 由
updateProfile
Mutation 使用的类型:UpdateProfileInput
、UpdateProfileResponse
和MutationResponse
实践
rover dev
不进行的操作?重点要点
- 一个存根子图是一个空子图,配备了启动并使其运行所需的最低必要配置。它使我们能够从一个干净的状态开始,使用模式检查来设置任何 CI/CD 管道并逐步进行模式迁移。
rover dev
通过在本地编写我们的子图模式并在本地启动一个路由器来帮助我们进行本地超图开发。
下一步
我们准备开始字段迁移!让我们了解@override
指令,以帮助我们使这种迁移顺利进行。
与他人分享对本课的疑问和评论
您的反馈有助于我们改进!如果您遇到阻碍或感到困惑,请告诉我们,我们会帮助您。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已解决或已处理的评论可能会被移除。
您需要一个 GitHub 帐户才能在下方发表评论。没有帐户? 在我们的 Odyssey 论坛中发帖。