4. 发布到注册表
5m

概述

在本课中,我们将

  • 创建一个,其中包含一个 ,位于
  • 将一个 发布到模式注册表,使用

在 GraphOS Studio 中创建图

我们先从创建一个新的 开始。

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

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

如果您之前从未在 Studio 中创建过 ,系统会提示您进行创建。

https://studio.apollographql.com

Studio - new organization, create new graph

否则,我们可以通过点击右上角的 + 创建新图 按钮来创建一个新的

https://studio.apollographql.com

Studio, create new graph

我们将为我们的 指定一个描述性的标题(我们选择的名字是“MusicMatcher”),将图架构的默认设置保留为“”,然后点击 下一步

https://studio.apollographql.com

Studio, create new graph modal options

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

我们现在应该看到一个新的模态框,其中包含发布模式的说明。

https://studio.apollographql.com

Studio, publish schema modal

发布soundtracks 模式

为了将我们的 soundtracks 模式发布到新的 ,我们将使用 。Rover 允许我们从命令行连接到我们的图并发布模式,但它首先需要一些数据:

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

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

我们现在就创建这个文件。

📦 Odyssey.MusicMatcher
┣ 📂 Router
┃ ┣ 📄 router-config.yaml
┃ ┣ 📄 .env

存储变量

  1. 首先,确保 超级图管道跟踪 下拉菜单设置为 联合 2.5 超级图。这指定我们的 应该使用与我们的模式相同的联合版本构建。我们正在使用的 Hot Chocolate 目前只支持 2.5 版本。

    https://studio.apollographql.com

    Studio, supergraph pipeline trackl

    确保您在 模式文档 选项卡上,而不是在 内省 选项卡上。

  2. 下面,稍微看一下发布 的命令。我们很快就会运行这个命令,但现在,我们更关心的是这里的 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
  3. 点击代码块上的眼睛图标,显示 APOLLO_KEY 的完整值。将 APOLLO_KEY 及其值复制到剪贴板,然后将其粘贴到 Router/.env 中。

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

    Router/.env
    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
  5. 在您的 Router/.env 文件中,添加一行,并设置您的 APOLLO_GRAPH_REF 环境变量:

    Router/.env
    APOLLO_KEY=your-graphs-apollo-key
    APOLLO_GRAPH_REF=your-graph-name@current

警告:出于安全原因,环境变量永远不应该提交到版本控制系统。因此,此项目包含一个 .gitignore 文件,该文件指定在将代码更改提交到存储库时应忽略 .env 文件。

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

the rover subgraph publish command

有一个命令可以帮助我们完成这个重要任务: rover subgraph publish。这个命令会将单个 的最新版本发布到 模式注册表中。

rover subgraph publish <APOLLO_GRAPH_REF> \
--name <SUBGRAPH NAME> \
--schema <SCHEMA FILE PATH> \
--routing-url <ROUTING URL>

要使用这个命令,我们需要 用于我们想要发布到的 ,以及以下命令行选项:

选项它是什么?
--name我们想为子图起什么名字
--schema子图模式文件的相对路径
--routing-url子图运行的 URL(暂时为本地)

注意: 如果您的 soundtracks 服务器尚未运行,请立即启动它!

我们将使用我们 soundtracks 的详细信息填写这些选项。

  1. 返回终端并确保我们在项目的根目录中。

  2. 现在让我们输入 rover subgraph publish 命令,并将我们 APOLLO_GRAPH_REF 环境变量的值粘贴进去。

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

    对于 schema 选项,我们将传入我们 schema.graphql 文件的相对路径。

    对于 routing-url 选项,我们将传入 https://127.0.0.1:5059/graphql,即我们的服务器运行的位置。

    rover subgraph publish <APOLLO_GRAPH_REF> \
    --name soundtracks \
    --schema schema.graphql \
    --routing-url https://127.0.0.1:5059/graphql

    注意:我们在该命令中使用了 \ 字符以提高可读性,将每个命令行选项放在单独的行上。如果您选择将整个 发布命令放在一行上,则不需要包含 \

  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 允许它。我们目前处于教程环境中,并在本地环境中工作!在生产环境中,我们将把这个命令整合到 CI/CD 中,并将其部署为可供我们自己计算机以外的人访问。

    请注意,您将在每次指向 localhost URL 的 发布命令之后看到此消息。

    如果一切顺利,我们应该会看到一条消息确认 已发布,并且 已更新!

在 GraphOS Studio 中检查结果

让我们回到 Studio,看看“查看模式更改”。

https://studio.apollographql.com

Studio - see schema changes

这会将我们带到一个名为 Launches 的新页面。每次我们对 进行更改时,都会运行一个 。我们将在即将到来的课程中更详细地了解启动。

https://studio.apollographql.com

Studio - Launches page

现在,让我们点击侧边栏中的 Schema 选项卡。

模式引用

模式引用页面让我们可以看到我们 中的所有类型和 。没错,即使我们只发布了一个 ,我们已经有了超级图模式!

https://studio.apollographql.com

Studio - schema reference

我们看到,我们 Query 类型包含两个 featuredPlaylistsplaylist(id)。每个 都用其描述、所需的任何 以及它所属的 进行注释。

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

API 模式 是暴露给客户端的 API。它清晰而逻辑地表示 的组合。(我们现在不会担心这个模式。)

https://studio.apollographql.com

Studio - API schema SDL

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

https://studio.apollographql.com

Studio - supergraph schema SDL

练习

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

关键要点

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

接下来

我们仍然缺少 架构中的一个重要部分:

上一页

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

本课程目前处于

beta
.您的反馈意见有助于我们改进!如果您遇到困难或困惑,请告知我们,我们将为您提供帮助。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。

您需要一个 GitHub 帐户才能在下方发布。没有帐户吗? 请改为在 Odyssey 论坛中发布。