联邦模式检查
使用模式检查进行独立和安全的子图开发
✨ 提示
有关模式检查的介绍,请参阅模式检查。
每次你对子图模式进行更改时,运行rover subgraph check
可以确保你的所有子图模式仍然可以组合成一个有效的超级图模式。这有助于团队独立地工作在你联邦图的部分,而不会对你的用户或其他团队产生负面影响。
当你对特定的子图运行rover subgraph check
时,GraphOS Studio将采取你的模式更改并尝试从所有注册的子图模式中组合一个超级图模式。
- 如果组合成功,结果将与你的最近注册的超级图模式进行比较,以确认没有已知的客户端会受到提议的更改的影响。
- 如果组合失败,验证将结束,并将结果返回给用户。
🔍 注意
运行rover subgraph check
永远不会更新你的当前已注册的超级图模式。
处理检查失败
在验证过程中可能会发生两种类型的失败:失败的用法检查和失败的组合。
- 失败的用法检查是由于破坏性更改(如删除一个字段)导致的失败,该字段是一个正处于查询状态的 hoạt động客户端所请求的。
- 失败的组合是由于无法组合图),例如缺少一个必需的
@key
教师实体。
在大多数情况下,您应该在成功运行 rover subgraph check
之后才运行 rover subgraph publish
。但是,某些工作流程需要故意发布一个失败的子图模式组合(例如在子图之间迁移实体或字段)。
即使 rover subgraph check
成功,rover subgraph publish
也可能会因为同时更改另一个子图而遇到组合错误。当这种情况发生时,只要子图注册的方案是符合规范的,其注册的方案仍然会被更新。但是,超图方案不会被更新。这意味着您的路由器 的配置也不会更新。
此行为的示例输出如下
$ rover subgraph publish docs-example-graph@current --name books --schema ./schema.graphqlPublishing SDL to docs-example-graph:current (subgraph: books) using credentials from the default profile.The gateway for the 'docs-example-graph' graph was NOT updated with a new schemaWARN: The following composition errors occurred:Field "Author.name" can only be defined once.There can be only one type named "Author".Field "Book.title" can only be defined once.Field "Book.author" can only be defined once.There can be only one type named "Book".
此功能的理由在于,Apollo 方案注册表应该始终反映您基础设施中正在运行的内容。即使这意味着您的基础设施中的组合失败的,注册表也应反映这一点。
然而,您仍希望您的路由器像最近部署之前一样正常运行。此外,此功能可用于执行相关变化,例如平稳地从子图迁移一个字段到一个或引入循环依赖关系。