Leaf Field Selections
Formal Specification
- For each selection in the document
- Let selectionType be the result type of selection
- If
selectionType
is a scalar:
- The subselection set of that selection must be empty
- If
selectionType
is an interface, union, or object
- The subselection set of that selection must NOT BE empty
Explanatory Text
Field selections on scalars are never allowed: scalars are the leaf nodes of any GraphQL query.
The following is valid.
fragment scalarSelection on Dog {
barkVolume
}
The following is invalid.
fragment scalarSelectionsNotAllowedOnBoolean on Dog {
barkVolume {
sinceWhen
}
}
Conversely the leaf field selections of GraphQL queries must be scalars. Leaf selections on objects, interfaces, and unions without subfields are disallowed.
Let’s assume the following additions to the query root type of the schema:
extend type QueryRoot {
human: Human
pet: Pet
catOrDog: CatOrDog
}
The following examples are invalid
query directQueryOnObjectWithoutSubFields {
human
}
query directQueryOnInterfaceWithoutSubFields {
pet
}
query directQueryOnUnionWithoutSubFields {
catOrDog
}