根据另一个参考模式验证 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 进行更复杂的更改。
我不太确定我应该搜索的措辞。
我有一个 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 进行更复杂的更改。