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

Rover子图命令

使用Rover管理子图


一个 子图是指 ,为 贡献的 超级图

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

命令与 进行交互。rover subgraph.

获取子图模式

这些命令允许你在 中获取单个 的模式。要获取超级图的 ,请使用 rover graph fetch。要获取 ,请使用 rover supergraph fetch

子图获取

你可以使用 Rover 从属于任何图 variantschema proposal(Rover有权限访问)的任何 subgraph 获取当前模式。

运行 subgraph fetch 命令,如下所示:

rover subgraph fetch my-graph@my-variant --name accounts

上面的示例中,my-graph@my-variant,它指定了你正从其中检索Studio图的市场 ID以及你正检索哪种图引

必需的--name选项指定了你正在检索模式。

从提案中检索副图模式

要从模式提案中检索一个,请使用提案的 ID 而不是 variants 的名称,如下所示:

rover subgraph fetch my-graph@p-101 --name accounts

提案ID通常以p-开头,后面跟着一个数字。您可以在提案的URL中找到提案 IDGraphOS Studio。例如,以下URL的提案 ID 为p-101

https://studio.apollographql.com/graph/Example-supergraph/proposal/p-101/home

注意

虽然您可以使用 rover subgraph fetch 从提案中拉取 ,但目前您不能使用 rover subgraph publish 将架构更改推送到提案。如果使用 rover subgraph publish 与提案 ID,更改将推送到提案的底层 variant 而不是提案本身。请使用 提案编辑器 而不是

子图检查

如果您需要获取运行中的 subgraph 的架构,您可以使用 Rover 执行对它的增强 查询。这对于子图没有通过 (如 graphql-kotlin)定义架构的情况非常有帮助。

使用 subgraph introspect 命令,如下所示:

rover subgraph introspect https://127.0.0.1:4001

子图必须是 Rover 能够访问的。子图不需要启用 introspection

与标准 introspection 查询不同,rover subgraph introspect 的结果包括某些 (特别是,像 @key 这样的与联邦相关的指令)。这是因为该命令使用了由 Apollo Federation subgraph规范 提供的单独 机制。

监视架构更改

如果将 --watch 传递给 rover subgraph introspectRover 将每秒检查一次您的 subgraph。每当返回的架构与之前返回的架构不同时,Rover 将输出更新后的架构。这通常与 --output <OUTPUT_FILE> 参数结合使用,该参数将在内容更改时将检查响应写入文件。

包含头信息

如果您要到达的端点需要 HTTP 头信息,您可以使用 --header-H)标志传递 key:value 头信息对的键值。如果您需要传递多个头信息,请多次提供标志。如果头信息中包含任何空白,则该对必须用引号括起来。

rover subgraph introspect https://127.0.0.1:4001 --header "Authorization: Bearer token329r"

输出格式

rover subgraph introspect https://127.0.0.1:4001\
| rover subgraph publish my-graph@dev\
--schema - --name accounts\
--routing-url https://my-running-subgraph.com/api

默认情况下,子图获取子图检查都以SDL形式输出到stdout。这对于将模式作为输入提供给其他Rover命令很有用:

rover subgraph introspect https://127.0.0.1:4000 | rover subgraph check my-graph --schema -

您还可以将输出保存到本地的.graphql文件,如下所示:

# Creates accounts-schema.graphql or overwrites if it already exists
rover subgraph introspect https://127.0.0.1:4000 --output accounts-schema.graphql

有关通过stdout传递值的更多信息,请参阅使用stdout

在超图中列出子图

subgraph list

此命令需要使用GraphOS对Rover进行认证。

您可以使用subgraph list列出特定超图supergraph中的所有可用子图GraphOS

rover subgraph list my-supergraph@staging

Subgraphs:
+----------+-------------- --------------+----------------------------+
| Name | Routing Url | Last Updated |
+----------+-----------------------------+----------------------------+
| reviews | https://reviews.my-app.com | 2020-10-21 12:23:28 -04:00 |
+----------+----------------------------------------+-----------------+
| books | https://books.my-app.com | 2020-09-20 13:58:27 -04:00 |
+----------+----------------------------------------+-----------------+
| accounts | https://accounts.my-app.com | 2020-09-20 12:23:36 -04:00 |
+----------+----------------------------------------+-----------------+
| products | https://products.my-app.com | 2020-09-20 12:23:28 -04:00 |
+----------+----------------------------------------+-----------------+
View full details at https://studio.apollographql.com/graph/my-supergraph/service-list

将子图模式发布到GraphOS

subgraph publish

此命令需要使用GraphOS对Rover进行认证。

您可以使用Rover将模式更改发布到Rover具有访问权限的supergraph变体或schema proposal

使用以下命令:

rover subgraph publish my-supergraph@my-variant \
--schema "./accounts/schema.graphql" \
--name accounts \
--routing-url "https://my-running-subgraph.com/api"

上面示例中的参数my-supergraph@my-variant是一个图引用,它指定了您要发布的GraphOS图的ID以及您要发布的变体

注意

  • 可以省略@和变体名称。如果省略,Rover将模式发布到默认变体,名为current
  • 目前无法使用rover subgraph publish将模式更改推送到提案。如果您使用rover subgraph publish与提案ID,则更改将推送到提案的底层variant,但不会推送到提案本身。请改用GraphOS Studio中的提案编辑器

选项包括

名称描述
--schema

必填。指向本地.graphql.gql文件的路径,该文件采用SDL格式

或者,您可以提供-,在这种情况下,命令将使用SDL字符串通过stdin进行管道传输(请参阅使用stdin)。

--name

必填。要发布的subgraph的名称。

每个subgraph的名称必须:

  • 以字母开头(大写或小写)
  • 仅包含字母、数字、下划线(_)和连字符(-
  • 最大长度为64个字符
--routing-url

您的supergraph用来与subgraph托管联邦架构中通信的URL。

必填第一次发布特定subgraph时。如果您的subgraph尚未部署,或您没有使用,您可以通过传递空字符串。

可选初次发布之后。如果您需要更改subgraph的路由URL,请提供。

--convert

如果您在此variant中已经有了一个用于该variant的单个Schema,而不是多个subgraph Schema,您需要在rover subgraph publish命令中使用--convert标志来将此variant转换为具有一个或更多subgraph的联邦图。

这将永久从该variant中删除单体 schema 并用单个subgraph替换它。在许多情况下,您需要在Studio能够成功合成超图 Schema 之前,运行多个或所有subgraphsubgraph publish命令。

如果您没有发布到非单体variant,此选项不会产生影响。

--allow-invalid-routing-url

默认情况下,rover subgraph publish与无法解析的路由URL关联的情况下将失败。如果您需要禁用此警告并允许发布无效的URL,您可以传递此选项。

--no-url

这是--routing-url "" --allow-invalid-routing-url的缩写。它将覆盖子图的任何现有路由URL。

创建变种

您可以使用subgraph publish命令创建一个新的variant,但不能创建一个新的graph

  • 如果graph在图注册表中存在,但variant不存在,发布时会创建一个新的variant
  • 如果graph不存在,命令将失败。

验证subgraph schema更改

subgraph check

此命令需要使用GraphOS对Rover进行认证。

在将子图模式更改发布到GraphOS之前发布子图模式更改到GraphOS,您可以检查这些更改以确认您没有向您的应用程序客户端引入破坏性更改。

这样做,您可以运行subgraph check命令:

# using a schema file
rover subgraph check my-graph@my-variant --schema ./schema.graphql --name accounts
# using piped input to stdin
rover subgraph introspect https://127.0.0.1:4000 \
| rover subgraph check my-graph@my-variant \
--schema - --name accounts

如图所示,和选项类似于subgraph publish

要配置模式检查的行为(例如检查过去操作的),请参阅模式检查文档

如果您不想等待检查完成,可以带有--background标记执行命令。然后您可以在GraphOS Studio的“检查”标签中查找检查的结果。

在CI中运行检查

如果您在CI中运行模式检查,可能希望将--background标记传递给rover subgraph check。此标记指示Rover启动模式检查但不应等待其结果。如果您已将GraphOS Studio连接到GitHub存储库,集成将检测检查的执行过程,并将状态添加到相关的拉取请求中。

子图-lint

此命令需要使用GraphOS对Rover进行认证。

您可以对本地子图模式运行GraphOS模式检查器,以识别任何违反格式化和命名最佳实践的情况:

示例命令
rover subgraph lint --name products --schema ./products-schema.graphql my-graph@my-variant

示例命令中的graph ref关键字参数my-graph@my-variant指定了您正在与之比较您的模式更改的graph的ID以及您要比较的版本

模式检查也作为subgraph check中包含的检查之一运行。使用此命令执行一次性检查。

选项包括

名称描述
--schema

必填。指向本地.graphql.gql文件的路径,该文件采用SDL格式

或者,您可以提供-,在这种情况下,命令将使用SDL字符串通过stdin进行管道传输(请参阅使用stdin)。

--name

必需。要比较模式更改的已发布子图名称。

--ignore-existing-lint-violations

如果提供,检查器只标记出现在您的本地模式和您的发布模式之间的差异中的违规。

默认情况下,此命令标记您本地模式中的所有违规。

删除子图

subgraph delete

此命令需要使用GraphOS对Rover进行认证。

您可以通过运行rover subgraph delete从联邦variant中删除单个子图:

# ⚠️ This action is irreversible!
rover subgraph delete my-graph@my-variant --name subgraph-to-delete

此命令提示您确认,因为该操作是不可逆的。您可以通过传递--confirm标志来绕过确认。

如果此子图中有任何其他子图引用类型,此命令将因错误而失败。

要删除整个联邦图而不是单个子图,请参阅删除一个变体

上一页
readme
下一页
supergraph
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,商业名称为Apollo GraphQL。

隐私政策

公司