加入我们,于10月8日至10日在纽约市学习关于GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入我们参加纽约市的2024年GraphQL峰会
文档
免费开始

Rover dev 命令

在您的本地开发环境中运行 supergraph


一个 supergraph是一个由多个 API(子图)和运行在其前面的 图路由器

Supergraph
Graph Router
Subgraph A
Subgraph B
Clients

当您对单个 进行本地更改时,您可以rover dev命令来启动本地 实例并测试子图更改对您的整个 的效果。

每当您向本地 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 进程时:

  1. Rover 通过 来获取您提供的,无论是通过 introspection 或文件路径。
  2. Roversubgraph 架构 合成一个 supergraph 架构
  3. Rover 启动一个本地运行的 路由器 会话,并提供给它 supergraph 架构
  4. Rover 开始监视所提供的 subgraph 架构 的更改,并在检测到更改时重新合成 supergraph 架构。这会自动重新加载路由器。

在您使用第一个 rover dev 进程启动本地路由器会话后,您可以运行额外的 rover dev 进程以 将 subgraph 添加到会话中。

启动多个 subgraph 的会话

如果您始终使用一组标准的 进行开发,您可以通过一个 supergraph 配置文件将它们全部添加到本地 router 会话中,只需使用一个 rover dev 命令。

例如,此 supergraph.yaml 文件提供了两个 subgraph 所需的必要详情:

supergraph.yaml
federation_version: =2.4.7
subgraphs:
products:
routing_url: http://127.0.0.1:4000
schema:
file: ./products.graphql # Schema provided via file
reviews:
schema:
subgraph_url: http://127.0.0.1:4001 # Schema provided via introspection, routing_url can be omitted
users:
# routing_url: <Optional, pulled from GraphOS registry by default>
schema: # Schema downloaded from GraphOS registry, does not poll for updates
graphref: mygraph@current
subgraph: actors

您可以将此文件提供给 rover dev,如下所示:

rover dev --supergraph-config supergraph.yaml

如果您这样做,将启动一个 router 会话,使用列出的其中一个 subgraph,然后依次添加剩余的 subgraph(顺序未定义)。因此,您可能会在中间步骤观察到 错误。

提供 supergraph.yaml 文件还可以让您利用其他配置选项,例如 其他配置选项,例如 introspection_headers

如果您使用配置文件启动会话,您仍然可以 单独添加其他 subgraph。但是,您不能提供另一个配置文件。

从 GraphOS Studio 变体启动会话

要使用 GraphOS Studio 启动本地 router 实例,请包含变体的 并使用 --graph-ref 选项,如下所示:

rover dev --graph-ref docs-example-graph@current

注意

要传递图形引用,您需要一个 或在 Rover 中配置的

当您包含图形引用时, Rover 使用 Studio 中关联变体的 subgraph 路由 URL 和模式作为 supergraph 配置。此信息存储在内存中,不会保存到磁盘。您可以在 Studio 变体的 子图 页面上查看变体的 subgraph,包括它们的路由 URL 和模式。

覆盖变体子图

在本地开发过程中,您可能希望在您的 Studio变体的子图中覆盖一个或多个子图。通过传递一个超级图配置文件和一个图引用,您可以实现这一功能。配置文件定义的任何子图都将覆盖图引用中定义的子图。

例如,给定一个supergraph_override.yaml文件,如下所示:

supergraph_override.yaml
subgraphs:
products:
routing_url: http://127.0.0.1:4000
schema:
file: ./products.graphql

您可以通过以下方式覆盖变体已发布的products 子图:

rover dev \
--graph-ref docs-example-graph@current \
--supergraph-config supergraph_override.yaml

此命令将在您的本地开发会话中覆盖变体已发布的products 子图。如果 Studio变体不包含products 子图,该命令将添加子图并重新组合超级图模式

覆盖联邦版本

您还可以使用一个超级图配置文件来安全地在本地测试新的联邦版本,然后将其投入生产。

例如,给定一个federation_override.yaml文件,如下所示:

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传递相同的路由器配置文件路径。

企业功能

如果您想使用企业路由器功能,则必须提供以下两者:

  1. 通过APOLLO_GRAPH_REF环境变量提供引用。
  2. 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以保持插件版本不变。

上一个
合同
下一个
解释
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apache Graph Inc.,即Apollo GraphQL。

隐私策略

公司