3. 创建超级图
10m

概述

让我们将我们的带到现实世界中。

在本课中,我们将

  • 使用我们的listings 创建一个新的
  • 设置环境变量

从子图到超级图

正如我们在上一课中所学,我们可以将我们的单个 listings—作为 的第一块。从“子”到“超级”的转变实际上比听起来容易得多。

准备好了吗?让我们开始吧。

创建新图

检查您的计划:本课程的一部分涵盖了自托管的 GraphOS 路由器,这需要 GraphOS 企业版计划。如果您所在的组织使用的是其他计划,您仍然可以继续阅读,但无法完成某些动手任务。您也可以通过注册免费的企业版试用.

  1. 打开一个新的浏览器窗口,访问 GraphOS Studio

  2. 如果您之前从未在 Studio 中创建过 ,您将被提示进行创建。否则,我们可以通过点击仪表板右上角的 + 创建新图 按钮来创建一个新图。

    studio.apollographql.com

    The New Graph button in Studio

  3. 我们将为我们的 起一个描述性的标题,将 图架构 的默认设置保留为“”,然后点击下一步。

    studio.apollographql.com

    The create graph modal in Studio, filled out with the name Airlock

    如果您没有看到上面的模态框,您可能使用的是错误的计划。

    检查您的计划:本课程的一部分涵盖了自托管的 GraphOS 路由器,这需要 GraphOS 企业版计划。如果您所在的组织使用的是其他计划,您仍然可以继续阅读,但无法完成某些动手任务。您也可以通过 注册免费的企业版试用 来体验此功能。

  4. 现在我们应该看到一个包含发布架构选项的模态框。

    studio.apollographql.com

    A modal window showing options for publishing the schema for our graph

我们准备好发布架构了!

任务!

发布 listings 架构

要将我们的 listings 架构发布到我们的新 ,我们将使用 。Rover 允许我们从命令行连接到我们的图并发布架构,但它首先需要一些数据。

  • APOLLO_KEY:您的 的 API 密钥,用于与 单个 中进行交互。它以类似于 "service:your-graph-name" 的形式开头。请注意,这与我们第一课中用于验证 个人 API 密钥不同,该密钥用于验证 ,并授予您对您所属组织中的每个 的部分访问权限。
  • APOLLO_GRAPH_REF:我们 (或图引用),我们将使用它来告诉 在哪里发布我们的 。图引用以图的 ID 开头,后面跟着一个 @ 符号,然后是

当我们运行 时,我们将再次使用这些值,因此我们可以将它们存储在一个新的文件中,该文件将添加到 router 目录中,名为 .env

让我们现在创建该文件。

📦 dgs-federation
┣ 📂 router
┃ ┣ 📄 router-config.yaml
┃ ┗ 📄 .env
┗ 📂 listings
任务!

存储变量

  1. 返回 Studio 中创建 后出现的配置选项。确保您位于 架构文档 选项卡上。

  2. 首先,确保 超级图管道跟踪 下拉列表设置为 Federation 2.7 超级图。这指定了我们的 应该使用 的最新功能构建。

    studio.apollographql.com

    The schema publish modal, highlighting the Supergraph Pipeline Track dropdown

  3. 下面,稍微看一下用于发布 的命令。我们将很快运行此命令,但现在,我们更感兴趣的是这里的 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
  4. 点击代码块上的眼睛图标以显示 APOLLO_KEY 的完整值。将 APOLLO_KEY 及其值复制到 router/.env 文件中。下一步我们将需要它,并且无法通过 Studio 再次访问相同的密钥。

    studio.apollographql.com

    The Apollo Key value outlined, along with the eye icon that toggles the value from hidden to visible

    router/.env
    APOLLO_KEY=your-unique-apollo-api-key
  5. 现在让我们返回 Studio 获取我们的 。我们正在寻找的值出现在相同的代码块中,紧接在命令的“ publish” 部分之后。我们将把这个值也保存为环境变量,但我们可以随时从我们图的主页访问它。

    studio.apollographql.com

    The graph ref value outlined

    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

太好了!在继续之前,我们应该确保已保存了两个环境变量。我们即将将它们投入使用!

router/.env
APOLLO_KEY=your-unique-apollo-api-key
APOLLO_GRAPH_REF=your-graph-name@current

我们已经获得了发布 所需的值!

The rover subgraph publish 命令

有一个命令可以帮助我们完成这项重要任务:rover subgraph publish。此命令将单个 的最新版本推送到

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 服务器尚未运行,请立即启动!

  1. 回到终端,确保我们位于项目 listings 目录中。

  2. 现在让我们输入 rover subgraph publish 命令:

    我们将粘贴 APOLLO_GRAPH_REF 环境变量的值。

    对于 name 选项,我们将传入 listings

    对于 schema 选项,我们将传入我们 schema.graphqls 文件的相对路径。从 listings 的根目录,该路径为 ./src/main/resources/schema/schema.graphqls

    对于 routing-url 选项,我们将传入 localhost:8080/graphql (或您的 listings 服务运行的位置!)。

    listings
    rover 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 命令,则无需包含 \

  3. 您将看到以下消息: 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 键。在本课程中,我们将坚持使用本地环境!

  4. 如果一切顺利,运行此命令应输出一条消息,确认 已经发布,并且 已更新!

在 Studio 中查看结果

让我们回到 Studio。我们可以点击 “查看模式更改” 在模式中查看我们 中发生了哪些变化。

studio.apollographql.com

The schema publish modal, now with the 'See schema changes' button highlighted

这将带我们到一个名为 发布 的新页面。一个 是每次我们对 进行更改时运行的过程。我们将在接下来的课程中仔细研究发布。

studio.apollographql.com

The Launches page in Studio, showing that changes were made to our graph

现在,让我们点击侧边栏中的 模式 选项卡。 模式引用 页面让我们可以看到我们组合的 中的所有类型和 。没错,即使我们只发布了一个 ,我们已经拥有一个超级图模式了!

我们看到我们的 Query 类型包含 中的两个 featuredListingslisting。每个 都有注释说明其描述、任何需要的 以及它属于哪个

studio.apollographql.com

The Schema reference page in Studio, showing the Query type with two fields: featuredListings and listing

让我们仔细看看那个 。点击 SDL 选项卡,它位于 模式 页面的顶部。在这里,我们可以看到有关我们已发布的 的详细信息,以及两个额外的模式。

studio.apollographql.com

The Schema page opened up to the SDL tab, highlighted the two options: API schema and supergraph schema

API 模式 是向您的客户端公开的 API。它干净且逻辑地表示您的 的组合。(我们现在不用担心这个模式。)

超级图模式 用作地图,用于定义如何将传入的 分配到基础 中。我们目前只有一个,因此操作中的所有 都将被路由到 listings

练习

rover subgraph publish 命令的作用是什么?

关键要点

  • 我们可以使用 rover subgraph publish 命令从 发布我们的 .
  • The 整合了我们发布的子图中的所有类型和 . 它还包括额外的 来帮助 确定哪些子图可以解析每个字段。

下一步

我们的 已设置,我们只缺少一个部分: ! 接下来,让我们运行路由器,发送一些查询,并检查 的洞察力!

上一页

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

本课程目前处于

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

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