概述
在本课中,我们将
- 创建一个超级图,其中包含一个 自托管路由器,位于 GraphOS
- 将一个 子图模式 发布到模式注册表,使用 Rover CLI
在 GraphOS Studio 中创建图
我们先从创建一个新的 超级图 开始。
- 打开一个新的浏览器窗口,并访问GraphOS Studio。
检查您的计划:本课程的一部分涵盖了自托管 GraphOS 路由器,这需要 GraphOS Enterprise 计划。如果您所在的组织使用的是其他计划,您仍然可以继续学习,但无法完成某些动手任务。您也可以通过 注册免费 Enterprise 试用版 来测试此功能。
如果您之前从未在 Studio 中创建过 图,系统会提示您进行创建。
否则,我们可以通过点击右上角的 + 创建新图 按钮来创建一个新的 图。
我们将为我们的 图 指定一个描述性的标题(我们选择的名字是“MusicMatcher”),将图架构的默认设置保留为“超级图”,然后点击 下一步。
如果您没有看到上面的 图 模态框,您可能使用的是错误的计划。
我们现在应该看到一个新的模态框,其中包含发布模式的说明。
发布soundtracks
模式
为了将我们的 soundtracks 模式发布到新的 图,我们将使用 Rover CLI。Rover 允许我们从命令行连接到我们的图并发布模式,但它首先需要一些数据:
APOLLO_KEY
:您的 图 的 API 密钥,用于与 单个 图 在 GraphOS 中进行交互。它以类似于“service:your-graph-name"
的内容开头。请注意,这与您的 个人 API 密钥不同,我们使用它在第一课中对 Rover 进行了身份验证,它允许您对您所属组织中的每个 图 进行部分访问。APOLLO_GRAPH_REF
:我们 超级图 的 图引用(或图引用),我们将使用它来告诉 Rover 在哪里发布我们的 子图。图引用以图的 ID 开头,后面跟着一个@
符号,后面跟着 图 变体。
我们将在运行 路由器 时再次使用这些值,因此我们可以将它们存储在一个新文件中,我们将在路由器目录中添加一个名为 .env
的文件。
我们现在就创建这个文件。
📦 Odyssey.MusicMatcher┣ 📂 Router┃ ┣ 📄 router-config.yaml┃ ┣ 📄 .env
存储变量
首先,确保 超级图管道跟踪 下拉菜单设置为 联合 2.5 超级图。这指定我们的 超级图 应该使用与我们的模式相同的联合版本构建。我们正在使用的 Hot Chocolate 子图 目前只支持 2.5 版本。
https://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
中。Router/.envAPOLLO_KEY=your-graphs-apollo-key现在,让我们回到 Studio 获取我们的 图引用。我们正在寻找的值出现在同一个代码块中,紧跟在“rover subgraph publish” 命令的一部分之后。我们将把这个值也保存为环境变量,但我们可以随时从我们的图的主页访问它。
Router/.envAPOLLO_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_GRAPH_REF
环境变量:Router/.envAPOLLO_KEY=your-graphs-apollo-keyAPOLLO_GRAPH_REF=your-graph-name@current
警告:出于安全原因,环境变量永远不应该提交到版本控制系统。因此,此项目包含一个 .gitignore
文件,该文件指定在将代码更改提交到存储库时应忽略 .env
文件。
我们已经获得了发布 子图 所需的值!
the rover subgraph publish
command
Rover 有一个命令可以帮助我们完成这个重要任务: rover subgraph publish
。这个命令会将单个 子图模式 的最新版本发布到 GraphOS 模式注册表中。
rover subgraph publish <APOLLO_GRAPH_REF> \--name <SUBGRAPH NAME> \--schema <SCHEMA FILE PATH> \--routing-url <ROUTING URL>
要使用这个命令,我们需要 图引用 用于我们想要发布到的 超级图,以及以下命令行选项:
选项 | 它是什么? |
---|---|
--name | 我们想为子图起什么名字 |
--schema | 子图模式文件的相对路径 |
--routing-url | 子图运行的 URL(暂时为本地) |
注意: 如果您的 soundtracks
服务器尚未运行,请立即启动它!
我们将使用我们 soundtracks
子图 的详细信息填写这些选项。
返回终端并确保我们在项目的根目录中。
现在让我们输入
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注意:我们在该命令中使用了 \ 字符以提高可读性,将每个命令行选项放在单独的行上。如果您选择将整个 rover 子图 发布命令放在一行上,则不需要包含
\
。您将看到以下消息
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,看看“查看模式更改”。
这会将我们带到一个名为 Launches 的新页面。每次我们对 超级图 进行更改时,都会运行一个 启动。我们将在即将到来的课程中更详细地了解启动。
现在,让我们点击侧边栏中的 Schema 选项卡。
模式引用
模式引用页面让我们可以看到我们 超级图模式 中的所有类型和 字段。没错,即使我们只发布了一个 子图,我们已经有了超级图模式!
我们看到,我们 超级图 的 Query 类型包含两个 字段: featuredPlaylists
和 playlist(id)
。每个 字段 都用其描述、所需的任何 变量 以及它所属的 子图 进行注释。
让我们仔细看看那个 超级图模式。点击 SDL 选项卡,位于 Schema 页面顶部。在这里,我们可以看到有关我们已发布的 子图 的详细信息,以及另外两个模式。
该 API 模式 是暴露给客户端的 GraphQL API。它清晰而逻辑地表示 子图模式 的组合。(我们现在不会担心这个模式。)
该 超级图模式 由 路由器 作为地图使用,用于定义如何将传入的 GraphQL 操作 分配到底层的 子图。我们目前只有一个,因此操作中的所有 字段 将被路由到 soundtracks
子图。
练习
关键要点
- 我们可以使用
rover subgraph publish
命令从 Rover CLI 发布我们的 子图模式 到 GraphOS。 - 该 超级图模式 整合了我们已发布的 子图 中的所有类型和 字段。它还包含额外的 指令 来帮助 路由器 确定哪些子图可以解析每个字段。
接下来
我们仍然缺少 超级图 架构中的一个重要部分: 路由器。
分享您有关本课程的问题和评论
本课程目前处于
您需要一个 GitHub 帐户才能在下方发布。没有帐户吗? 请改为在 Odyssey 论坛中发布。