Rover子图命令
使用Rover管理子图
一个 子图是指 graph,为 composition 贡献的 超级图:
Rover 命令与 subgraphs 进行交互。rover subgraph
.
获取子图模式
这些命令允许你在 supergraph 中获取单个 subgraph 的模式。要获取超级图的 API schema,请使用 rover graph fetch
。要获取 supergraph schema,请使用 rover supergraph fetch
。
子图获取
此命令需要 使用GraphOS认证Rover。
你可以使用 Rover 从属于任何图 variant 或 schema 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 而不是提案本身。请使用 提案编辑器 而不是 GraphOS Studio。
子图检查
如果您需要获取运行中的 subgraph 的架构,您可以使用 Rover 执行对它的增强 检查 查询。这对于子图没有通过 SDL(如 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 introspect
,Rover 将每秒检查一次您的 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 existsrover 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中的提案编辑器。
选项包括
名称 | 描述 |
---|---|
| 必填。指向本地 或者,您可以提供 |
| 必填。要发布的subgraph的名称。 每个subgraph的名称必须:
|
| 您的supergraph用来与subgraph在托管联邦架构中通信的URL。 必填第一次发布特定subgraph时。如果您的subgraph尚未部署,或您没有使用托管联邦,您可以通过传递空字符串。 可选初次发布之后。如果您需要更改subgraph的路由URL,请提供。 |
| 如果您在此variant的图注册表中已经有了一个用于该variant的单个Schema,而不是多个subgraph Schema,您需要在 这将永久从该variant中删除单体 schema 并用单个subgraph替换它。在许多情况下,您需要在Studio能够成功合成超图 Schema 之前,运行多个或所有subgraph的subgraph publish命令。 如果您没有发布到非单体variant,此选项不会产生影响。 |
| 默认情况下, |
| 这是 |
创建变种
您可以使用subgraph publish
命令创建一个新的variant,但不能创建一个新的graph。
- 如果graph在图注册表中存在,但variant不存在,发布时会创建一个新的variant。
- 如果graph不存在,命令将失败。
验证subgraph schema更改
subgraph check
此命令需要使用GraphOS对Rover进行认证。
在将子图模式更改发布到GraphOS之前发布子图模式更改到GraphOS,您可以检查这些更改以确认您没有向您的应用程序客户端引入破坏性更改。
这样做,您可以运行subgraph check
命令:
# using a schema filerover subgraph check my-graph@my-variant --schema ./schema.graphql --name accounts# using piped input to stdinrover 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
中包含的检查之一运行。使用此命令执行一次性检查。
选项包括
名称 | 描述 |
---|---|
| 必填。指向本地 或者,您可以提供 |
| 必需。要比较模式更改的已发布子图名称。 |
| 如果提供,检查器只标记出现在您的本地模式和您的发布模式之间的差异中的违规。 默认情况下,此命令标记您本地模式中的所有违规。 |
删除子图
subgraph delete
此命令需要使用GraphOS对Rover进行认证。
您可以通过运行rover subgraph delete
从联邦variant中删除单个子图:
# ⚠️ This action is irreversible!rover subgraph delete my-graph@my-variant --name subgraph-to-delete
此命令提示您确认,因为该操作是不可逆的。您可以通过传递--confirm
标志来绕过确认。
如果此子图中有任何其他子图引用类型,此命令将因错误而失败。
要删除整个联邦图而不是单个子图,请参阅删除一个变体。