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

概述

准备连接列表和评论?首先,让我们确保我们已准备好进行本地开发。

在本课中,我们将

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

从开发到生产

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

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

但是,除了将新更改直接应用到我们正在运行的生产环境中以外 ,我们如何实际测试我们的 API 是否会继续运行?

GraphOS 超级图开发工具包

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

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

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

studio.apollographql.com/sandbox/explorer

The Sandbox Explorer

我们工具包中的第二个工具是 rover template——它是一组模板,可用于快速使用你选择的语言或框架启动新项目。我们将在本系列的后面看到使用这种方式启动的 的示例,但由于 DGS 本身就与联合兼容,因此它本身就可以快速设置!

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 在运行。如果你还没有,请通过按下播放按钮(如果使用 IntelliJ)或对每个子图运行以下命令来在本地启动它们:

./gradlew bootRun
任务!
任务!

配置文件

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

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

supergraph-config.yaml
federation_version: =2.7.0
subgraphs:
listings:
routing_url: http://127.0.0.1:8080/graphql
schema:
file: ./listings/src/main/resources/schema/schema.graphqls
reviews:
routing_url: http://127.0.0.1:8090/graphql
schema:
file: ./reviews/src/main/resources/schema/schema.graphqls

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

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

我们已准备好启动 rover dev

运行 rover dev

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

dgs-federation
rover dev --supergraph-config ./router/supergraph-config.yaml

注意: 因为 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.7.1
🚀 your supergraph is running! head to https://127.0.0.1:4000 to query your supergraph
👀 watching ./reviews/src/main/resources/schema/schema.graphqls for changes
🎶 composing supergraph with Federation v2.7.1
✅ successfully composed after adding the 'listings' subgraph
👀 watching ./listings/src/main/resources/schema/schema.graphqls for changes

太棒了,看起来我们的 正在运行,地址为 https://127.0.0.1:4000。让我们检查一下吧!

注意:默认情况下,rover dev 在端口 4000 上运行 。如果您希望在不同的端口上运行它,您可以添加额外的标志 --supergraph-port(或 -p)并将其设置为不同的值。只要确保您没有使用端口 80808090;这些端口被我们的 占用!

在浏览器中,导航到 https://127.0.0.1:4000。我们将看到 Sandbox 连接到端口 4000,准备让我们 本地 ,该本地 rover dev 生成。

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

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

变量 面板中:

{
"listingId": "listing-1"
}

运行查询,然后... 数据! 🎉 您可以确认 Studio 和 Sandbox 中返回的数据相同。

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

这是一个您可以探索、测试新概念和构思新功能的游乐场,这一切都不会影响生产

练习

rover dev 做以下哪一项?

关键要点

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

下一步

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

上一页

分享您关于本课的问题和评论

本课程目前正在

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

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