与其他人一起于10月8日至10日在纽约市参加活动,学习有关GraphQL联盟和API平台工程的最新技巧、趋势和新闻。在纽约市参加GraphQL峰会2024
文档
免费开始

Rover 超图命令

用于 Apollo Federation 超图


一个 超图(也称为联邦 )是由多个 子图 组成的图:

Supergraph (A + B + C)
Subgraph A
Subgraph B
Subgraph C

命令与 交互 begins with rover supergraph。这些命令主要处理 超图模式

从 GraphOS 获取超图模式

supergraph fetch

您可以使用 Rover 获取任何可访问的联邦 Studio 图 的超图模式。运行 supergraph fetch 命令,例如:

rover supergraph fetch my-supergraph@my-variant

若要获取 ,请使用 graph fetch 而不是其他方式。 了解不同模式类型。

在上述例子中,参数 中的 my-supergraph@my-variant 指定了你从 图中获取的 ID,以及你正在获取的 变体

注意

您可以选择省略 @ 和变体名称。如果您这样做,则 ; 将使用默认变体,名为 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) 包含了对每个 子图 的配置选项。以下示例文件配置了具有两个 filmspeople)的 supergraph:

supergraph.yaml
federation_version: =2.3.2
subgraphs:
films:
routing_url: https://films.example.com
schema:
file: ./films.graphql
people:
routing_url: https://people.example.com
schema:
file: ./people.graphql

在上面的示例中,YAML 文件指定了每个 的公开 URL(routing_url)以及其模式文件的路径(schema.file)。

单个配置文件可以从中获取来自各种来源的 。例如,以下是一个包含从三种不同类型的来源中获取子图模式的配置文件:

supergraph.yaml
federation_version: =2.3.2
subgraphs:
# Local .graphql file
films:
routing_url: https://films.example.com
schema:
file: ./films.graphql
# Subgraph introspection
people:
routing_url: https://example.com/people # <- can be omitted if the same as introspection URL
schema:
subgraph_url: http://127.0.0.1:4002
introspection_headers: # Optional headers to include in introspection request
Authorization: Bearer ${env.PEOPLE_AUTH_TOKEN}
# GraphOS Studio graph ref
actors:
routing_url: http://127.0.0.1:4005 # <- can be omitted if matches existing URL in Studio
schema:
graphref: mygraph@current
subgraph: 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 exists
rover 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 版本必须不超过您 router 支持的最高版本。在增加 federation_version 之前,请确保更新您的 router。有关详情,请参阅此 支持表
  • 如果您指定了 Federation 1 版本,而您的任何 subgraphs 使用了 Federation 2 架构,则构造将失败。
  • 未来版本的 supergraph construct 将失败,如果您没有指定确切的 Federation 版本。在您的配置中包含 Federation 版本,以防止未来 Rover 版本的破坏性更改。

自动更新

如果您在 supergraph.yaml 中未指定 federation_version(未来版本中将需要),Rover 将根据以下逻辑确定要使用哪个版本:

N
Yes
N
Yes
Is the federation_version key
present in supergraph.yaml?
Does at least one subgraph schema
opt in to Federation 2?
Use the version specified
by federation_version
Use latest Federation 1
composition
Use latest Federation 2
composition

一个 通过添加本文中描述的特殊 @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/federationJavaScript包。

我们建议尽快更新到最新的Rover版本。如果您仍在使用旧版本,请参阅以下有关不同版本@apollo/gateway库兼容性的表格:

Rover版本网关版本
<= v0.2.x<= v0.38.x
>= v0.3.x>= v0.39.x
上一个
子图
下一个
模板
评价文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私政策

公司