Just recording my amazement here. Suppose you have a GraphQL server. How do you ask it what’s the query schema?
You would expect something like calling https://myserver/graphql/schema? Nah, that would be too REST’y.
So, maybe it’s sending something like query { __schema }
to the GraphQL endpoint? Well, sort of, but it’s much more complicated than that. With GraphQL you need to tell it exactly what you want. And you want a bunch of things, including query names, field names, and recursive description of the types involved.
Actually, GraphQL can’t really handle recursive, the best you can do is to ask for types N levels down. The actual schema query is below, it goes 8 levels deep when querying for types. Fascinating, no?
Source: https://stackoverflow.com/questions/37397886/get-graphql-whole-schema-query
query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } }