Rover 超图命令
用于 Apollo Federation 超图
一个 超图(也称为联邦 图)是由多个 子图 组成的图:
Rover 命令与 超图 交互 begins with rover supergraph
。这些命令主要处理 超图模式。
从 GraphOS 获取超图模式
supergraph fetch
此命令需要 通过 GraphOS 身份验证 Rover。
您可以使用 Rover 获取任何可访问的联邦 Studio 图 版本 的超图模式。运行 supergraph fetch
命令,例如:
rover supergraph fetch my-supergraph@my-variant
若要获取 supergraph 的 API 模式,请使用 graph fetch
而不是其他方式。 了解不同模式类型。
在上述例子中,参数 argument 中的 my-supergraph@my-variant
指定了你从 Studio 图中获取的 ID,以及你正在获取的 变体。
ⓘ 注意
您可以选择省略 @
和变体名称。如果您这样做,则 ;Rover 将使用默认变体,名为 current
。
组合超级图模式
supergraph compose
您可以使用 supergraph compose
命令根据 supergraph 配置文件来组合 supergraph 模式,如下所示:
rover supergraph compose --config ./supergraph.yaml
您也可以通过 stdin 传递配置
cat ./supergraph.yaml | rover supergraph compose --config -
YAML 配置文件
Supergraph 配置文件(通常称为 supergraph.yaml
) 包含了对每个 子图 的配置选项。以下示例文件配置了具有两个 子图(films
和 people
)的 supergraph:
federation_version: =2.3.2subgraphs:films:routing_url: https://films.example.comschema:file: ./films.graphqlpeople:routing_url: https://people.example.comschema:file: ./people.graphql
在上面的示例中,YAML 文件指定了每个 子图 的公开 URL(routing_url
)以及其模式文件的路径(schema.file
)。
单个配置文件可以从中获取来自各种来源的 子图模式。例如,以下是一个包含从三种不同类型的来源中获取子图模式的配置文件:
federation_version: =2.3.2subgraphs:# Local .graphql filefilms:routing_url: https://films.example.comschema:file: ./films.graphql# Subgraph introspectionpeople:routing_url: https://example.com/people # <- can be omitted if the same as introspection URLschema:subgraph_url: http://127.0.0.1:4002introspection_headers: # Optional headers to include in introspection requestAuthorization: Bearer ${env.PEOPLE_AUTH_TOKEN}# GraphOS Studio graph refactors:routing_url: http://127.0.0.1:4005 # <- can be omitted if matches existing URL in Studioschema:graphref: mygraph@currentsubgraph: actors
变量扩展
supergraph.yaml 文件支持使用与 GraphOS Router 同样的语法进行 变量展开
输出格式
默认情况下,rover supergraph compose
会输出一个 supergraph 模式文档到 stdout
。您可以将此工件提供给 @apollo/gateway
或在启动时使用 🦀 GraphOS Router。
⚠️ 注意
如果您向不支持该 模式 的路由器/网关提供超级图模式,路由器/网关将无法启动。为确保兼容性,我们建议您始终在 CI 管道中使用您最终在生产中使用的超级图模式测试启动您的路由器/网关。
您可以将模式输出保存到本地的 .graphql
文件,如下所示:
# Creates prod-schema.graphql or overwrites if it already existsrover supergraph compose --config ./supergraph.yaml --output prod-schema.graphql
有关通过 stdout 传递值的更多信息,请参阅 Using stdout
。
Federation 2 ELv2 许可证
首次在特定计算机上使用 Federation 2 组合 时,Rover 会提示您接受 ELv2 许可证的条款和条件。在后续调用中,Rover 会记住您已接受许可证,并且不会再次提示您(即使您更新了 Rover)。
ⓘ 注意
CI 系统会在每次运行时清除任何持久化的 Rover 配置,并且它们无法接受交互式 ELv2 提示。要在 CI 中自动接受提示,请执行以下操作之一:
- 在您的 CI 环境中设置环境变量
APOLLO_ELV2_LICENSE=accept
。 - 在您的
rover supergraph compose
命令中包含--elv2-license accept
。 - 运行
yes | rover supergraph compose
The ELv2-licensed supergraph
plugin (built from this source) is installed to ~/.rover/bin
if you installed with the curl | sh
installer, and to ./node_modules/.bin/
if you installed with npm.
设置构造版本
每次您运行 rover supergraph compose
时,Rover 会自动下载您指定的 federation 版本的 composition 库,无论您是在 supergraph.yaml 中指定,还是通过 stdin 进行。
该命令支持 Federation 1 和 Federation 2 的构造。Federation 1 和 Federation 2 使用不同的构造算法,这些算法分别在不同的库中实现:
- Federation 1:
@apollo/federation
- Federation 2:
@apollo/composition
ⓘ 注意
- 您指定的 federation 版本必须不超过您 router 支持的最高版本。在增加
federation_version
之前,请确保更新您的 router。有关详情,请参阅此 支持表。 - 如果您指定了 Federation 1 版本,而您的任何 subgraphs 使用了 Federation 2 架构,则构造将失败。
- 未来版本的 rover supergraph construct 将失败,如果您没有指定确切的 Federation 版本。在您的配置中包含 Federation 版本,以防止未来 Rover 版本的破坏性更改。
自动更新
如果您在 supergraph.yaml
中未指定 federation_version
(未来版本中将需要),Rover 将根据以下逻辑确定要使用哪个版本:
一个 subgraph 模式 通过添加本文中描述的特殊 @link
指令 来“选择加入”Federation 2。
最新的联合库版本存储在此文件上,它在Rover存储库的main
分支中。如果您未指定具体的联合库版本,新插件版本将从该文件交付和来源。
如果您在更新组合管道之前不更新您的router版本,这种自动更新流程将会引发问题。Apollo强烈建议始终指定具体的federation_version
。
防止自动更新
在某些情况下,您可能希望Rover跳过将其组合库更新到最新版本。例如,您可能有一个速度较慢或不存在的网络连接。
在这些情况下,您可以将--skip-update
标志传递给rover supergraph compose
。如果您提供此标志,您的supergraph.yaml
文件必须指定一个federation_version
(无论何种情况下都推荐这样做)。
旧版Rover版本
Rover的版本在v0.5.0之前只支持Federation 1组合,通过@apollo/federation
JavaScript包。
我们建议尽快更新到最新的Rover版本。如果您仍在使用旧版本,请参阅以下有关不同版本@apollo/gateway
库兼容性的表格:
Rover版本 | 网关版本 |
---|---|
<= v0.2.x | <= v0.38.x |
>= v0.3.x | >= v0.39.x |