如何在 GraphQL 模式中定义嵌套枚举类型
Posted
技术标签:
【中文标题】如何在 GraphQL 模式中定义嵌套枚举类型【英文标题】:How to define Nested enum type in GraphQL schema 【发布时间】:2022-01-03 16:41:41 【问题描述】:我在 graphql 架构中定义了一个枚举,如下所示:
enum QueryType
NORMAL, RANGE, REGEX, WILDCARD
但是WILDCARD查询,可以进一步指定为STARTSWITH、ENDSWITH和CONTAINS,
那么我们可以在定义 Schema 的同时实现类似下面的效果
enum QueryType
NORMAL, RANGE, REGEX, enum WILDCARD STARTSWITH, ENDSWITH, CONTAINS
或
enum QueryType
NORMAL, RANGE, REGEX, WILDCARD: WildCardType
enum WildCardType STARTSWITH, ENDSWITH, CONTAINS
【问题讨论】:
【参考方案1】:GraphQL 模式中没有这样的嵌套枚举。您可以考虑使用具有单独枚举的两个单独字段对其进行建模。
enum QueryType
NORMAL ,RANGE , REGEX , WILDCARD
enum WildcardType
STARTSWITH , ENDSWITH ,CONTAINS
假设对象类型调用SearchQuery
需要包含这些信息。它的架构可能如下所示:
type SearchQuery
queryType : QueryType!
wildcardType : WildcardType
wildcardType
是一个可选字段,仅当 queryType 为 WILDCARD
时才包含该值。否则,它应该为空。
或者,您也可以考虑使用interface 将其建模为更“多态”的样式。喜欢的东西:
interface SearchQuery
queryType: QueryType!
type WildCardQuery implements SearchQuery
queryType: QueryType!
wildcardType : WildcardType!
type NonWildCardQuery implements SearchQuery
queryType: QueryType!
【讨论】:
谢谢@KenChan,我不能使用 WildCardQuery 类型和输入 NonWildCardQuery 作为字段的输入类型,如何将此类型转换为输入类型? 输入类型不支持接口。恐怕你现在必须对输入类型使用第一个选项,尽管@oneof (github.com/graphql/graphql-spec/pull/825) 的 RFC 正在进行中以实现输入的“多态”风格以上是关于如何在 GraphQL 模式中定义嵌套枚举类型的主要内容,如果未能解决你的问题,请参考以下文章