根据另一个参考模式验证 GraphQL 模式

Validate a GraphQL schema against another reference schema

我不太确定我应该搜索的措辞。

我有一个 GraphQL 架构,它使用 graphql-link-schema 包装了一组服务,以在客户端执行数据解析。该模式旨在针对单独的参考模式构建。我如何以编程方式验证我的实现是否与参考相匹配?

为了加分——是否可以确定一个模式是否是另一个模式的超集?

提前致谢 (:

这是一个有趣的用例,但有点不清楚这样的验证是如何工作的。是什么导致验证失败?两种模式之间有什么区别吗?额外类型?现有类型的额外字段? return 类型的差异?参数或参数类型的差异?

不过,根据您对上述问题的回答,您可以使用可用的实用函数拼凑出自己的验证函数 here。在主 findBreakingChanges 函数之外,该模块中提供了一些实用函数:

findRemovedTypes
findTypesThatChangedKind
findFieldsThatChangedTypeOnObjectOrInterfaceTypes
findFieldsThatChangedTypeOnInputObjectTypes
findTypesRemovedFromUnions
findValuesRemovedFromEnums
findArgChanges
findInterfacesRemovedFromObjectTypes

但是,如果您有可用的参考或基本模式,则可以考虑在构建第二个模式时扩展它,而不是对其进行验证。这样做,您将有效地保证第二个模式与第一个模式匹配,除非您有意偏离它的任何方式(通过扩展现有类型等)。您可以使用 extendSchema for relatively simply changes, or something like graphql-tool's mergeSchemas 进行更复杂的更改。