5. 本地架构检查
5m

概览

我们现在已经是我们工具带中的工具,因此让我们看看它们如何应用到 listings 中的更改。

在本课中,我们将

  • 查看本地开发环境中的代码更改
  • 查看值类型和 @shareable 中的指令
  • 了解如何使用 在本地运行架构检查

查看样机

让我们再次了解星系坐标项目需要什么内容。

Mockup of the Airlock listing page, showing the location information (latitude, longitude) under the location details. It also shows the location information of the listing owner (the host).

我们需要列表详细信息页面来显示列表及其主机的星系坐标。星系坐标将以纬度和经度值的组合形式显示。

提示:你不会和课程一起编码,但是当我们实现这些代码更改时,请注意我们介绍的步骤和概念!

Airlock 团队拥有两名成员负责此功能,每人来自一个 团队:

  • 👩🏽‍🏫 房源团队的 Lisa
  • 👩🏽‍🚀 账户团队的 Achilles

我们将帮助他们结合我们在之前课程中( )学到的知识融入到他们的开发流程中!

local 开发环境中的变更

👩🏽‍🏫 房源团队的 Lisa 已开始针对此功能展开工作,具体做法是对模式、数据解析器和数据源进行补充。我们不妨了解一下他们为启动此功能所做的工作。

listings 现已包含一项新类型: GalacticCoordinates。此 具有纬度和经度(两者均为非可空 Float)。

subgraph-listings/schema.graphql
"Coordinates in the galaxy"
type GalacticCoordinates {
latitude: Float!
longitude: Float!
}

GalacticCoordinates 类型是 值类型 的示例。值类型是跨多个 重复使用和共享的类型。此类类型可以是 、枚举、联合或接口。我们在 Voyage II 中看到了接口作为值类型的示例。

现在,GalacticCoordinates 仅在 listings 中使用,但记住,我们还需要显示属于 宿主位置的 accounts@shareable 将使这两个 解析此类型。

注意:如果您已完成航程 II,我们在讨论字段共享时简要地介绍了 @shareable 指令。请注意,(例如 GalacticCoordinates)的值类型需要使用 @shareable ,但接口(如我们在航程 II 中介绍的内容)则不需要。

Lisa 将需要向 @shareable 添加到 GalacticCoordinates类型。

subgraph-listings/schema.graphql
"Coordinates in the galaxy"
type GalacticCoordinates @shareable {
latitude: Float!
longitude: Float!
}

最后,Lisa 还向 Listing 添加了一个 coordinates。此 返回 GalacticCoordinates类型。

subgraph-listings/schema.graphql
type Listing @key(fields: "id") {
# … other listing fields
"Where this listing is located in the galaxy"
coordinates: GalacticCoordinates
}

Lisa 已经为 实现了代码,以检索此新 的正确数据。

太好了,这些更改应该能够帮助我们入门!让我们重新审视下一步的 CI 流程:将代码推送到 GitHub 并开启 PR。

Diagram showing the CI workflow. See detailed image description below.

不过,别忘了我们工具带中有个新条目: 。我们可以在 推动代码之前在本地运行架构检查。这将使我们能够捕获并解决与 或现有 相关的任何错误。

Diagram showing the CI workflow, with an additional step inserted. See detailed image description below.

运行本地架构检查

要运行本地架构检查,我们将使用 rover subgraph check 命令,采用以下参数:

rover subgraph check <GRAPH_NAME>@<GRAPH_VARIANT> \
--schema <SCHEMA_FILE_PATH> \
--name <SUBGRAPH_NAME>

我们需要检查我们的本地 对于 暂存 , 给它我们的 listings.graphql 架构文件和 的名称 listings. 在用我们 的值替换参数后,命令看起来像这样:

rover subgraph check airlock-managed-fed@staging \
--schema "listings.graphql" \
--name listings

因为 Airlock 是一种 , 构建检查将首先运行,然后 检查.

流程完成后,我们可以看到架构变更报告。终端输出显示以下内容

Checking the proposed schema for subgraph listings against airlock-managed-fed@staging
Check Result:
Compared 4 schema changes against 16 operations
┌────────┬─────────────┬─────────────────────────────────────────────────────┐
│ Change │ Code │ Description │
├────────┼─────────────┼─────────────────────────────────────────────────────┤
│ PASS │ TYPE_ADDED │ type `GalacticCoordinates`: created │
├────────┼─────────────┼─────────────────────────────────────────────────────┤
│ PASS │ FIELD_ADDED │ type `GalacticCoordinates`: field `latitude` added │
├────────┼─────────────┼─────────────────────────────────────────────────────┤
│ PASS │ FIELD_ADDED │ type `GalacticCoordinates`: field `longitude` added │
├────────┼─────────────┼─────────────────────────────────────────────────────┤
│ PASS │ FIELD_ADDED │ type `Listing`: field `coordinates` added │
└────────┴─────────────┴─────────────────────────────────────────────────────┘

第一列指示每个变更是否通过或未通过检查。第二列指示我们做出的变更类型,如 TYPE_ADDEDFIELD_ADDED. 最后一列提供变更的更详细描述,如创建了哪个准确类型以及在该类型下添加了哪个 .

太赞了,我们没有错误!我们可以看出构建检查已通过,因为输出表中的每一行都有 PASS 状态。架构变更也与现有的客户端 进行了比较,并且未检测到任何重大变更。

让我们回想一下我们的开发流程。我们已经完成了第一步,甚至通过添加本地架构检查改进了我们的流程。

Diagram showing the improved CI workflow. See detailed image description below.

实践

rover subgraph check 命令需要以下哪种信息?
rover subgraph check 命令针对非联合图运行哪些类型的 schema 检查?

重点提示

  • 我们使用 rover subgraph check 命令来本地执行
  • @shareable 允许多个 解析特定的对象 (或对象字段集)。

接下来

让我们继续改进我们的工作流程。在下一课中,我们将向我们的 CI 管道添加 ,以便只要创建 PR 就能自动运行它们。

上一个

分享你对本课的问题和评论

你的反馈有助于我们提升!如果你遇到困难或困惑,请告知我们。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已解决或解决的评论可能会被移除。

需要有一个 GitHub 账户才能在下方发帖。没有账户? 转而在我们的 Odyssey 论坛发帖。