6. 使用 rover dev 进行本地开发
10m

概述

准备将商品列表和评论连接起来了吗?首先,让我们确保已设置好本地开发环境。

在本课中,我们将

  • 回顾一下 开发工具包 提供
  • 使用rover dev 对我们的

从开发到生产

即使我们的 和两个 都在本地运行,我们正在模拟在实时流量环境中托管所有内容时发生的相同交换。

与开发任何应用程序一样,我们需要一个工作流程,该流程允许我们在本地进行更改,测试它们并确信我们已经解决了任何问题 将更改推送到生产环境之前。(或者至少是在教程中,我们的生产环境版本!)

但是,除了将新的更改直接合并到我们正在运行的生产 中,我们如何真正测试我们的 API 是否将继续运行?

GraphOS 超图开发工具包

提供了一个 超图开发工具包,它可以帮助开发人员快速轻松地在 架构中构建和使用

而且正如您可能已经猜到的,我们已经一直在使用 开发工具包的某些部分!

沙盒就是这样一种工具,它是 的一种特殊模式,它为我们提供了资源管理器(我们一直在使用它构建和运行针对本地运行的 的查询的 IDE)、模式引用、 和差异。

studio.apollographql.com/sandbox/explorer

The Sandbox Explorer

我们工具包中的第二个工具是 rover template,它是一组模板,可用于使用您选择的语言或框架快速启动新项目。事实上,它就是我们用来设置 reviews 的!

Rover template options shown as Java plus GraphQL, .NET plus GraphQL, and Go plus GraphQL

注意:您对其他用于不同语言引导新 的模板感到好奇吗?请查看 rover template 在 Apollo 文档中

我们 开发工具包的最后一部分是 rover dev

rover dev 用于本地开发

到目前为止,我们已经看到来自两个 的数据通过运行本地 汇集在一起。现在让我们想象一下,我们的路由器和两个子图都运行在我们云基础设施中的某个实时位置。

现在该进行一些更改了。我们想对 进行一些本地调整,并希望在编码时进行实时验证,以确保我们的 仍然可以组合这些更改。

中有一个特殊的命令可以完全处理这种情况。让我们看看 rover dev 如何融入我们的 开发工作流程。

使用 rover dev

rover dev 允许我们启动一个 本地 (就在您的计算机上!),它可以跨一个或多个 进行 。每个子图都可以本地或远程运行。它是在我们的本地开发环境中的一个 !这使我们能够在将更改发布到 之前实现和测试更改。

The rover dev command, showing a router receiving a request and splitting it between two subgraphs

现在您可能在想:我们之前不是已经本地运行了一个 吗?在 第 4 课:运行路由器 中,我们下载了一个 并将其在本地运行。

主要区别在于?那个 连接到我们 注册表,而我们将要使用 rover dev 运行的路由器将连接到我们本地的 更改,即使这些更改尚未发布到注册表!这使我们能够试用新功能和模式更新;我们可以在开发环境的安全范围内享受,同时模拟更改与 和其他子图组合在一起时的运行方式。

要开始,我们需要 listingsreviews 运行。如果您还没有,请通过在每个目录中运行以下命令在本地启动它们。

npm run dev
任务!
任务!

配置文件

启动 rover dev 会话并使用多个 的最简单方法是使用一个 YAML 文件来列出每个子图的详细信息。

router 目录中创建一个名为 supergraph-config.yaml 的新文件,并将以下内容粘贴到其中:

supergraph-config.yaml
federation_version: =2.7.0
subgraphs:
listings:
routing_url: http://127.0.0.1:4000
schema:
file: ./listings/src/schema.graphql
reviews:
routing_url: http://127.0.0.1:4001
schema:
file: ./reviews/src/schema.graphql

第一行定义了我们正在使用的联合版本。

subgraphs 下,我们列出了 中每个 的名称。两个 listingsreviews 都在本地运行,因为我们将从 odyssey-federation-typescript 目录的根目录运行此命令,因此我们指定了每个 schema.graphql 文件的相对路径。我们还提供了运行每个 的路由 URL。

我们已准备好启动 rover dev 了!

运行 rover dev

odyssey-federation-typescript 项目目录的根目录中打开一个新的终端。让我们运行 rover dev 并使用 --supergraph-config 标志传入配置文件的路径。

odyssey-federation-typescript
rover dev --supergraph-config ./router/supergraph-config.yaml --supergraph-port 4002

注意: 因为 supergraph-config.yaml 文件位于我们的 router 目录中,我们将从项目仓库的根目录传入路径。

运行后,我们将得到以下输出

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

太棒了,看起来我们的 正在运行于 https://127.0.0.1:4002。让我们看看吧!

注意:默认情况下,rover dev 在端口 4000 上运行 ,这就是为什么我们使用 --supergraph-port 标志指定不同的端口:4000 已经被我们的 listings 占用!

在浏览器中,导航到 https://127.0.0.1:4002。我们将看到 Sandbox 连接到端口 4002,准备好了让我们 本地 ,它是由 rover dev 生成的。

在文档面板中,我们可以看到我们熟悉的 来自我们的 listings 。试试这个 来获取所有评论和特定列表。

query GetAllReviewsAndListing($listingId: ID!) {
allReviews {
id
text
rating
}
listing(id: $listingId) {
title
}
}

变量 面板中:

{
"listingId": "listing-1"
}

运行查询,数据出来了!🎉 你可以确认 Studio 和 Sandbox 中返回的数据是一样的。

现在,我们可以随意在 listingsreviews 中进行任何更改,并亲眼看看 将如何处理它们。我们甚至可以启动一个 全新的 subgraph 并将其添加到我们的本地 中。

这是你的探索乐园,可以测试新概念,构思新功能,而不会影响生产环境的

练习

以下哪个不是 rover dev 的功能?

关键要点

  • GraphOS 开发工具包包含以下内容:Sandbox、rover templaterover dev
  • rover dev 允许我们启动一个 本地 ,它可以 一个或多个
  • 要使用 rover dev,我们需要每个 的名称、运行的 URL 以及(可选)模式文件的路径。最简单的方法是使用 配置文件。

下一步

我们已经拥有了开始进行更改所需的一切!让我们将注意力重新回到那个连接列表与其评论之间数据的梦想 。为此,我们需要深入了解跨 协调数据的过程中必不可少的一部分:实体。

上一个

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

本课程目前处于

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

你需要一个 GitHub 帐户才能在下方发布。没有帐户? 请在我们的 Odyssey 论坛中发布。