【问题标题】:How to define Nested enum type in GraphQL schema如何在 GraphQL 模式中定义嵌套枚举类型
【发布时间】: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}

【问题讨论】:

    标签: java graphql graphql-java


    【解决方案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 正在进行中以实现输入的“多态”风格
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 2021-08-11
    • 2019-01-07
    • 2021-11-27
    • 2011-11-09
    • 1970-01-01
    • 2018-11-20
    • 2019-12-29
    相关资源
    最近更新 更多