Rover dev 命令
在您的本地开发环境中运行 supergraph
一个 supergraph是一个由多个 GraphQL API(子图)和运行在其前面的 图路由器:
当您对单个 子图进行本地更改时,您可以rover dev
命令来启动本地 路由器实例并测试子图更改对您的整个 supergraph的效果。
每当您向本地 supergraph中添加、修改或删除子图时,Rover会自动将您的单个 子图模式重新组合成一个统一的 supergraph模式并为您提供本地 router会话。
⚠️ 警告
不要在生产环境中运行 rover dev
。它仅适用于本地开发。
启动路由器会话
要使用 rover dev
,您至少需要有一个运行的 GraphQL API(即 子图)。 Rover可以通过 内省(标准或 联邦内省)来获取子图的模式,或者您可以提供本地模式文件。
以下是一个示例 rover dev
命令,指向本地运行 subgraph,并通过本地文件提供其架构:
rover dev --name products --schema ./products.graphql --url https://127.0.0.1:4000
ⓘ 注意
您不需要提供本地运行的 subgraph。您可以选择指向本地环境可以访问的任何 GraphQL 网关。您甚至可以混合使用本地和远程 subgraph,这对测试本地更改与您的预发布 subgraph 非常有帮助。
当您启动第一个 rover dev
进程时:
- Rover 通过 subgraph 架构 来获取您提供的,无论是通过 introspection 或文件路径。
- Rover 从 subgraph 架构 合成一个 supergraph 架构。
- Rover 启动一个本地运行的 路由器 会话,并提供给它 supergraph 架构。
- Rover 开始监视所提供的 subgraph 架构 的更改,并在检测到更改时重新合成 supergraph 架构。这会自动重新加载路由器。
在您使用第一个 rover dev
进程启动本地路由器会话后,您可以运行额外的 rover dev
进程以 将 subgraph 添加到会话中。
启动多个 subgraph 的会话
如果您始终使用一组标准的 subgraph 进行开发,您可以通过一个 supergraph 配置文件将它们全部添加到本地 router 会话中,只需使用一个 rover dev
命令。
例如,此 supergraph.yaml
文件提供了两个 subgraph 所需的必要详情:
federation_version: =2.4.7subgraphs:products:routing_url: http://127.0.0.1:4000schema:file: ./products.graphql # Schema provided via filereviews:schema:subgraph_url: http://127.0.0.1:4001 # Schema provided via introspection, routing_url can be omittedusers:# routing_url: <Optional, pulled from GraphOS registry by default>schema: # Schema downloaded from GraphOS registry, does not poll for updatesgraphref: mygraph@currentsubgraph: actors
您可以将此文件提供给 rover dev
,如下所示:
rover dev --supergraph-config supergraph.yaml
如果您这样做,将启动一个 router 会话,使用列出的其中一个 subgraph,然后依次添加剩余的 subgraph(顺序未定义)。因此,您可能会在中间步骤观察到 组合 错误。
提供 supergraph.yaml
文件还可以让您利用其他配置选项,例如 其他配置选项,例如 introspection_headers
。
如果您使用配置文件启动会话,您仍然可以 单独添加其他 subgraph。但是,您不能提供另一个配置文件。
从 GraphOS Studio 变体启动会话
ⓘ 注意
Apollo 正在积极改进 Rover 与 GraphOS Studio 之间的集成。如果您对这个功能有任何反馈,请 联系我们。
要使用 GraphOS Studio 的 变体 启动本地 router 实例,请包含变体的 图形引用 并使用 --graph-ref
选项,如下所示:
rover dev --graph-ref docs-example-graph@current
ⓘ 注意
要传递图形引用,您需要一个 个人 API 密钥 或在 Rover 中配置的 图形 API 密钥。
当您包含图形引用时, Rover 使用 Studio 中关联变体的 subgraph 路由 URL 和模式作为 supergraph 配置。此信息存储在内存中,不会保存到磁盘。您可以在 Studio 变体的 子图 页面上查看变体的 subgraph,包括它们的路由 URL 和模式。
覆盖变体子图
在本地开发过程中,您可能希望在您的 Studio变体的子图中覆盖一个或多个子图。通过传递一个超级图配置文件和一个图引用,您可以实现这一功能。配置文件定义的任何子图都将覆盖图引用中定义的子图。
例如,给定一个supergraph_override.yaml
文件,如下所示:
subgraphs:products:routing_url: http://127.0.0.1:4000schema:file: ./products.graphql
您可以通过以下方式覆盖变体已发布的products
子图:
rover dev \--graph-ref docs-example-graph@current \--supergraph-config supergraph_override.yaml
此命令将在您的本地开发会话中覆盖变体已发布的products
子图。如果 Studio变体不包含products
子图,该命令将添加子图并重新组合超级图模式。
覆盖联邦版本
您还可以使用一个超级图配置文件来安全地在本地测试新的联邦版本,然后将其投入生产。
例如,给定一个federation_override.yaml
文件,如下所示:
federation_version: =2.4.7
您可以通过以下方式覆盖变体的联邦版本:
rover dev \--graph-ref docs-example-graph@current \--supergraph-config federation_override.yaml
向会话添加子图
启动的第一个 Testrover dev
命令后,您可以添加其他子图到同一个会话。
要添加一个子图,请打开一个新的终端窗口,再次运行rover dev
,这次为要添加的子图提供详细信息。例如,此命令添加了一个users
子图:
rover dev --name users --url https://127.0.0.1:4002
Rover将检测您现有的会话并将此新进程附加到它。
当您向会话添加一个新的子图时,Rover 将重新组合超级图模式,并更新Rover,以便您可以通过单个路由端点查询所有添加的子图。
ⓘ 注意
Rover 使用运行中的Rover端口来识别现有会话。如果您通过--supergraph-port
或--router-config
指定了自定义端口,请确保为所有您想要附加到相同会话的rover dev
进程指定相同的端口。
停止会话
如果停止您的初始rover dev
进程(通过按下CTRL+C
),它将关闭本地Rover会话。这还将关闭附加到该会话的任何次要rover dev
进程。
删除子图
如果您通过按CTRL+C
)停止辅助rover dev进程,其关联的路由器会话将重新构建超级图模式(不包括对应的子图),然后重新加载路由器。
健康检查
默认情况下,在rover dev中禁用了路由器的健康检查端点。您可以通过在路由器配置YAML文件中启用它,并通过--router-config
参数传递给rover dev来再次启用它,如下一节所述。
配置路由器
要配置高级router功能,例如CORS设置或子图头传递,您可以通过--router-config <ROUTER_CONFIG_PATH>
参数向rover dev传递有效的路由器配置YAML文件。
请注意,只有主rover dev进程在启动路由器时使用此路由器配置文件。如果使用supergraph.listen
指定了不同的监听地址,则其他所有rover dev进程都需要通过--supergraph-port
和--supergraph-address
传递相同的值,并且/或者通过--router-config
传递相同的路由器配置文件路径。
企业功能
如果您想使用企业路由器功能,则必须提供以下两者:
- 通过
APOLLO_GRAPH_REF
环境变量提供图引用。 - 在graph API密钥中提供,可以通过
APOLLO_KEY
环境变量提供,或者通过在Rover中配置凭据提供。
Federation 2 ELv2许可证
首次在特定机器上使用Federation 2合成时,Rover会提示您接受ELv2许可证的条款和条件。后续调用中,Rover将记住您已接受许可证,不会再提示(即使更新Rover)。
ELv2许可证的插件supergraph
(基于此源)和router
(基于此源)被安装到~/.rover/bin
,如果您使用curl | sh
安装程序,并且如果您使用npm安装,则在./node_modules/.bin/
。
版本控制
默认情况下,rover dev
使用最新版本的router和composition供您使用。这目前已在Rover GitHub仓库中配置,但您可以通过设置环境变量APOLLO_ROVER_DEV_COMPOSITION_VERSION=2.0.0
和/或APOLLO_ROVER_DEV_ROUTER_VERSION=1.0.0
来覆盖这些设置。默认情况下,rover dev
将始终使用主版本为v2的composition库和主版本为v1的router。如果您已经安装了插件,可以通过向rover dev
传递--skip-update
以保持插件版本不变。