Rozszerzanie schematu
Rozszerzanie schematuTypy 'Enum String'

Typy 'Enum String'

Niektóre informacje mogą przyjmować wyłącznie wartości z predefiniowanego zbioru, co idealnie powinno być modelowane przy użyciu typu Enum. Jednak typy enum mają ograniczenie polegające na tym, że ich wartości nie mogą zawierać znaku "-", a zdarzają się sytuacje, w których nie można tego uniknąć.

Na przykład, sensowne byłoby posiadanie typu enum CustomPostEnum, zawierającego listę wszystkich custom post types, które mogą być odpytywane (tj. tych zarejestrowanych w witrynie i które zostały dopuszczone do odpytywania). Jednak custom post types mogą zawierać znak "-" w swoich nazwach, jak w przykładzie "some-custom-cpt" poniżej:

{
  customPosts(
    filter: {
      customPostTypes: ["post", "product", "some-custom-cpt"]
    }
  ) {
    # ...
  }
}

Z powodu tego ograniczenia typ ten nie może być typem enum. Zamiast tego Gato GraphQL implementuje go jako własny typ "Enum String", który jest typem String mogącym przyjmować wyłącznie wartości z predefiniowanego zbioru, podobnie jak Enum.

Przykłady typów EnumString zaimplementowanych w schemacie GraphQL obejmują:

  • CustomPostEnumString
  • TagTaxonomyEnumString
  • CategoryTaxonomyEnumString
  • MenuLocationEnumString

Introspekcja: pobieranie możliwych wartości dla typów "Enum String"

Możemy pobrać listę akceptowanych wartości dla każdego typu EnumString poprzez introspekcję:

query EnumStringTypePossibleValues {
  __schema {
    types {
      name
      extensions {
        # This will print the enum-like "possible values" for EnumString type resolvers, or `null` otherwise
        possibleValues
      }
    }
  }
}