加入我们,从10月8日至10日在纽约市,了解关于 GraphQL Federation 和 API 平台架构的最新技巧、趋势和新闻。加入我们参加2024年纽约市 GraphQL 大会
文档
免费开始

迁移到Rover

从Apollo CLI迁移到Rover CLI


关于Apollo CLI是Apollo之前的CLI工具,用于管理,与GraphOS结合使用。

本指南帮助您迁移到,通过突出显示工具之间的关键差异,并提供使用Rover执行常见Apollo CLI工作流的示例。

先决条件

建议您首先阅读Rover约定,因为本指南是在此基础上构建的。

在阅读此指南之前,安装并配置Rover也是很实用的。

配置

Rover对于配置的方法比Apollo CLI更加明确和具体。在Rover中,大多数配置选项都是通过特定命令的标志来指定的,而不是在配置文件中。

除了config auth命令创建的隐藏配置文件外,Rover还使用了特定的YAML文件来为config auth命令和supergraph compose命令指定配置。

使用工作室进行身份验证

Apollo CLI通过读取环境变量来确定要使用的API密钥,与进行认证。使用Rover,设置API密钥的推荐方法是使用config auth命令。不过该命令是交互式的,因此你仍然可以在CI/CD环境中使用环境变量

如果你不确定你的API密钥从哪里读取,或者你在密钥上遇到问题,可以使用config whoami命令进行调试。

替换 apollo.config.js

Apollo CLI会读取apollo.config.js文件来加载某些配置选项。以下表格列出了apollo.config.js中最常见的字段以及它们如何转换到Rover(也可查看示例)选项:

apollo.config.js 字段Rover 选项
name/service.name

GRAPH_REF位置符。这是任何使用Apollo 的第一个位置符。

service.localSchemaFile

--schema标志。

注意:此标志不支持多个文件。

service.endpoint.url

URL位置符。这是introspect命令的第一个位置符。

service.endpoint.headers

--header/-H标志在introspect命令中。

注意:使用此标志多次以指定多个头。

使用代理服务器

使用Apollo CLI时,您必须配置global-agent才能使您的流量通过HTTP代理路由:

GLOBAL_AGENT_HTTP_PROXY=http://proxy-hostname:proxy-port \
npx -n '-r global-agent/bootstrap' \
apollo client:download-schema …

使用Rover,您可以设置HTTP_PROXY和/或HTTPS_PROXY环境变量,所有Rover的流量都将通过指定的代理路由:

HTTP_PROXY=http://proxy-hostname:proxy-port rover graph fetch mygraph

有关Rover使用代理服务器信息的更多信息,请在此处

Inspector

在Apollo CLI中,当您将--endpoint选项传递给service:pushservice:checkservice:download等命令时,会幕后进行正在运行服务的审查。在Rover中,您将运行graph introspect命令,并将其结果传递到类似的graph/subgraph pushgraph/subgraph check命令。

这种步骤分离使Rover的审查使用更加灵活和透明。此外,将审查分离成自己的步骤,如果你遇到错误,会使调试更加容易。

如果您目的是从一个运行端点下载模式,您可以将graph introspect的结果直接输出到一个文件中。有关Rover中stdin/stdout如何工作的更多信息,请点击这里

单体与联邦图

Apollo CLI的API使用apollo service:*命令集来处理单体和联邦图。而Rover将图和联邦图视为不同的对象。

在Rover中处理联邦图时,您通常会使用subgraph命令集,因为大多数针对联邦图的操作都涉及到其中一个子图(例如检查单个子图的变化)。Rover还提供了一个supergraph命令集,用于组合和使用supergraph模式。

有关graphsubgraphsupergraph之间区别的更多信息,请查看约定

Rover的限制

为了维持可维护性、路线图考虑和时间,Rover有意缺失了Apollo CLI的一些功能。其中一些功能可能在以后会添加,但目前还没有发布时间表。

客户端命令

Rover的关注点是提供优秀的图管理体验。因此,我们有意省略了关注客户端项目开发的命令,例如client:codegenclient:check

通配符

虽然Apollo CLI广泛使用通配符来支持使用多个本地文件,甚至自动发现目录树中的文件,但在某些情况下这很有帮助,但Apollo CLI中的通配符策略引起了许多问题。Rover有意不在第一次发布时将通配符用于文件指定。

作为解决方案,您可能可以使用 cat 将多个文件合并并传递给带有 stdin 的 Rover。请参见 此示例

可机器读取的输出

在 Apollo CLI 中,许多命令支持其他输出格式选项,例如 --json--markdown。目前,Rover 仅支持 --format json,并将 Markdown 格式留给消费者。有关 Rover 中 JSON 输出的更多信息,请参阅 这些文档

以下是从 rover {sub}graph check my-graph --format json 控制台输出的转换脚本示例,可以在 此 gist 中找到。

示例

以下示例假定已设置环境变量或配置文件以验证 Apollo CLI,并已运行 rover config auth 命令以验证 Rover。

从 Apollo 图谱注册表中检索图谱的模式

## Apollo CLI ##
# automatically outputs to schema.graphql
apollo client:download-schema --graph my-graph --variant prod
## Rover ##
# automatically outputs to stdout. Can redirect to schema.graphql with the `--output <OUTPUT_FILE>` argument
rover graph fetch my-graph@prod --output schema.graphql

从内省中检索图谱的模式

## Apollo CLI ##
# automatically outputs to schema.graphql
# can ONLY output introspection results in JSON
apollo service:download --endpoint https://127.0.0.1:4000
## Rover ##
# automatically outputs to stdout. Can redirect to schema.graphql with the `--output <OUTPUT_FILE>` argument
# can ONLY output SDL
rover graph introspect https://127.0.0.1:4000 --output schema.graphql

将单体模式发布到 Apollo 图谱注册表

## Apollo CLI ##
apollo service:push --graph my-graph --variant prod --endpoint https://127.0.0.1:4000
## Rover ##
rover graph introspect https://127.0.0.1:4000 | rover graph publish my-graph@prod --schema -

检查单体图谱的变化

## Apollo CLI ##
apollo service:check --graph my-graph --variant prod --localSchemaFile ./schema.graphql
## Rover ##
rover graph check my-graph@prod --schema ./schema.graphql

发布联合子图谱

曾被称为 Apollo CLI 中的 "实施服务" 或仅仅是 "服务"(一个多义词)。

## Apollo CLI ##
apollo service:push \
--graph my-graph \
--variant prod \
--serviceName users \
--localSchemaFile ./users.graphql
## Rover ##
rover subgraph publish my-graph@prod \
--schema ./users.graphql \
--name users

检查子图谱的变化

## Apollo CLI ##
apollo service:check \
--graph my-graph \
--variant prod \
--serviceName users \
--localSchemaFile ./users.graphql
## Rover ##
rover subgraph check my-graph@prod \
--schema ./users.graphql \
--name users

检查图谱的变化(使用配置文件)

在 Apollo CLI 中,配置文件原本意在替代命令使用中的标志,但往往这使得正在运行的命令细节过于抽象和难以跟踪。Rover 更详细的使用方法旨在更直接和明确。

// apollo.config.js
module.exports = {
// this is the GRAPH_REF positional arg in Rover
name: 'my-graph@prod',
endpoint: {
url: 'https://127.0.0.1:4001',
headers: {
// passed with the --header flag in Rover
authorization: 'Bearer wxyz',
},
},
};
## Apollo CLI ##
apollo service:check
## Rover ##
# (no config file needed)
rover graph introspect https://127.0.0.1:4001 --header "authorization: Bearer wxyz" \
| rover graph check my-graph@prod --schema -

使用配置文件推送子图变更

// apollo.config.js
module.exports = {
service: {
// this is the GRAPH_REF positional arg in Rover
name: 'my-graph@prod',
// multiple schema files that can be concatenated
localSchemaFile: './*.graphql'
}
};
## Apollo CLI ##
apollo service:push --serviceName users
## Rover ##
# (no config file needed)
# globs don't work natively with Rover, so you can use a command like `awk 1`
# to combine multiple files on *nix machines
awk 1 *.graphql | rover subgraph publish my-graph@prod --name users --schema -
上一页
验证客户端操作
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,作为Apollo GraphQL公司运营。

隐私政策

公司