概述
让我们将我们的超级图带到现实世界中。
在本课中,我们将
- 使用我们的
listings
子图创建一个新的 超级图 - 设置环境变量
从子图到超级图
正如我们在上一课中所学,我们可以将我们的单个 子图—listings
—作为 超级图的第一块。从“子”到“超级”的转变实际上比听起来容易得多。
准备好了吗?让我们开始吧。
创建新图
检查您的计划:本课程的一部分涵盖了自托管的 GraphOS 路由器,这需要 GraphOS 企业版计划。如果您所在的组织使用的是其他计划,您仍然可以继续阅读,但无法完成某些动手任务。您也可以通过注册免费的企业版试用.
打开一个新的浏览器窗口,访问 GraphOS Studio。
如果您之前从未在 Studio 中创建过 图,您将被提示进行创建。否则,我们可以通过点击仪表板右上角的 + 创建新图 按钮来创建一个新图。
studio.apollographql.com我们将为我们的 图 起一个描述性的标题,将 图架构 的默认设置保留为“超级图”,然后点击下一步。
studio.apollographql.com如果您没有看到上面的模态框,您可能使用的是错误的计划。
检查您的计划:本课程的一部分涵盖了自托管的 GraphOS 路由器,这需要 GraphOS 企业版计划。如果您所在的组织使用的是其他计划,您仍然可以继续阅读,但无法完成某些动手任务。您也可以通过 注册免费的企业版试用 来体验此功能。
现在我们应该看到一个包含发布架构选项的模态框。
studio.apollographql.com
我们准备好发布架构了!
发布 listings
架构
要将我们的 listings
架构发布到我们的新 图,我们将使用 Rover CLI。Rover 允许我们从命令行连接到我们的图并发布架构,但它首先需要一些数据。
APOLLO_KEY
:您的 图 的 API 密钥,用于与 单个 图 在 GraphOS 中进行交互。它以类似于"service:your-graph-name"
的形式开头。请注意,这与我们第一课中用于验证 个人 API 密钥不同,该密钥用于验证 Rover,并授予您对您所属组织中的每个 图 的部分访问权限。APOLLO_GRAPH_REF
:我们 超级图 的 图引用(或图引用),我们将使用它来告诉 Rover 在哪里发布我们的 子图。图引用以图的 ID 开头,后面跟着一个@
符号,然后是 图 的 变体。
当我们运行 路由器 时,我们将再次使用这些值,因此我们可以将它们存储在一个新的文件中,该文件将添加到 router
目录中,名为 .env
。
让我们现在创建该文件。
📦 dgs-federation┣ 📂 router┃ ┣ 📄 router-config.yaml┃ ┗ 📄 .env┗ 📂 listings
存储变量
返回 Studio 中创建 超级图 后出现的配置选项。确保您位于 架构文档 选项卡上。
首先,确保 超级图管道跟踪 下拉列表设置为 Federation 2.7 超级图。这指定了我们的 超级图 应该使用 Apollo Federation 的最新功能构建。
studio.apollographql.com下面,稍微看一下用于发布 子图架构 的命令。我们将很快运行此命令,但现在,我们更感兴趣的是这里的
APOLLO_KEY
环境变量。APOLLO_KEY=your-graphs-apollo-key \rover subgraph publish your-graph-name@current \--name products --schema ./products-schema.graphql \--routing-url http://products.prod.svc.cluster.local:4001/graphql点击代码块上的眼睛图标以显示
APOLLO_KEY
的完整值。将APOLLO_KEY
及其值复制到router/.env
文件中。下一步我们将需要它,并且无法通过 Studio 再次访问相同的密钥。studio.apollographql.comrouter/.envAPOLLO_KEY=your-unique-apollo-api-key现在让我们返回 Studio 获取我们的 图引用。我们正在寻找的值出现在相同的代码块中,紧接在命令的“rover subgraph publish” 部分之后。我们将把这个值也保存为环境变量,但我们可以随时从我们图的主页访问它。
studio.apollographql.comAPOLLO_KEY=your-graphs-apollo-key \rover subgraph publish your-graph-name@current \--name products --schema ./products-schema.graphql \--routing-url http://products.prod.svc.cluster.local:4001/graphql
太好了!在继续之前,我们应该确保已保存了两个环境变量。我们即将将它们投入使用!
APOLLO_KEY=your-unique-apollo-api-keyAPOLLO_GRAPH_REF=your-graph-name@current
我们已经获得了发布 子图 所需的值!
The rover subgraph publish
命令
Rover 有一个命令可以帮助我们完成这项重要任务:rover subgraph publish
。此命令将单个 子图模式 的最新版本推送到 GraphOS Studio。
rover subgraph publish <APOLLO_GRAPH_REF> \--name <SUBGRAPH NAME> \--schema <SCHEMA FILE PATH> \--routing-url <ROUTING URL>
要使用此命令,我们需要 图引用 用于我们要发布到的 超级图 以及以下命令行选项:
选项 | 它是什么? |
---|---|
--name | 我们在 GraphOS 中想要给子图取的名字 |
--schema | 子图模式文件相对于当前目录的路径 |
--routing-url | 子图运行的 URL(目前为本地) |
让我们为我们的 listings
子图 填写此命令。
注意: 如果您的 listings
服务器尚未运行,请立即启动!
回到终端,确保我们位于项目
listings
目录中。现在让我们输入
rover subgraph publish
命令:我们将粘贴
APOLLO_GRAPH_REF
环境变量的值。对于
name
选项,我们将传入listings
。对于
schema
选项,我们将传入我们schema.graphqls
文件的相对路径。从listings
的根目录,该路径为./src/main/resources/schema/schema.graphqls
。对于
routing-url
选项,我们将传入localhost:8080/graphql
(或您的listings
服务运行的位置!)。listingsrover subgraph publish <APOLLO_GRAPH_REF> \--name listings \--schema ./src/main/resources/schema/schema.graphqls \--routing-url https://127.0.0.1:8080/graphql注意: 我们在此命令中使用了
\
字符,通过将每个命令行选项放在单独一行来提高可读性。如果您选择在单行上输入整个rover subgraph publish
命令,则无需包含\
。您将看到以下消息:
The host localhost is not routable via the public internet. Continuing the publish will make this subgraph reachable in local environments only. Would you still like to publish? [y/N]
继续并按y
键。在本课程中,我们将坚持使用本地环境!如果一切顺利,运行此命令应输出一条消息,确认 子图 已经发布,并且 超级图 已更新!
在 Studio 中查看结果
让我们回到 Studio。我们可以点击 “查看模式更改” 在模式中查看我们 超级图 中发生了哪些变化。
这将带我们到一个名为 发布 的新页面。一个 发布 是每次我们对 超级图 进行更改时运行的过程。我们将在接下来的课程中仔细研究发布。
现在,让我们点击侧边栏中的 模式 选项卡。 模式引用 页面让我们可以看到我们组合的 超级图模式 中的所有类型和 字段。没错,即使我们只发布了一个 子图,我们已经拥有一个超级图模式了!
我们看到我们的 超级图 的 Query
类型包含 listings 子图 中的两个 字段:featuredListings
和 listing
。每个 字段 都有注释说明其描述、任何需要的 变量 以及它属于哪个 子图。
让我们仔细看看那个 超级图模式。点击 SDL 选项卡,它位于 模式 页面的顶部。在这里,我们可以看到有关我们已发布的 子图 的详细信息,以及两个额外的模式。
API 模式 是向您的客户端公开的 GraphQL API。它干净且逻辑地表示您的 子图模式 的组合。(我们现在不用担心这个模式。)
超级图模式 被 路由器 用作地图,用于定义如何将传入的 GraphQL 操作 分配到基础 子图 中。我们目前只有一个,因此操作中的所有 字段 都将被路由到 listings
子图。
练习
关键要点
- 我们可以使用
rover subgraph publish
命令从 Rover CLI 发布我们的 子图模式 到 GraphOS. - The 超级图模式 整合了我们发布的子图中的所有类型和 字段. 它还包括额外的 指令 来帮助 路由器 确定哪些子图可以解析每个字段。
下一步
我们的 超级图 已设置,我们只缺少一个部分: 路由器! 接下来,让我们运行路由器,发送一些查询,并检查 GraphOS 的洞察力!
分享您关于本课的疑问和评论
本课程目前处于
您需要一个 GitHub 帐户才能在下方发布。没有帐户? 在我们的 Odyssey 论坛中发布。