Argument Names
Formal Specification
- For each argument in the document
- Let argumentName be the Name of argument .
- Let argumentDefinition be the argument definition provided by the parent field or definition named argumentName .
- argumentDefinition must exist.
Explanatory Text
Every argument provided to a field or directive must be defined in the set of possible arguments of that field or directive.
For example the following are valid:
fragment argOnRequiredArg on Dog {
doesKnowCommand(dogCommand: SIT)
}
fragment argOnOptional on Dog {
isHousetrained(atOtherHomes: true) @include(if: true)
}
the following is invalid sincecommand
is not defined onDogCommand
.
fragment invalidArgName on Dog {
doesKnowCommand(command: CLEAN_UP_HOUSE)
}
and this is also invalid asunless
is not defined on@include
.
fragment invalidArgName on Dog {
isHousetrained(atOtherHomes: true) @include(unless: false)
}
In order to explore more complicated argument examples, let’s add the following to our type system:
type Arguments {
multipleReqs(x: Int!, y: Int!): Int!
booleanArgField(booleanArg: Boolean): Boolean
floatArgField(floatArg: Float): Float
intArgField(intArg: Int): Int
nonNullBooleanArgField(nonNullBooleanArg: Boolean!): Boolean!
booleanListArgField(booleanListArg: [Boolean]!): [Boolean]
}
extend type QueryRoot {
arguments: Arguments
}
Order does not matter in arguments. Therefore both the following example are valid.
fragment multipleArgs on Arguments {
multipleReqs(x: 1, y: 2)
}
fragment multipleArgsReverseOrder on Arguments {
multipleReqs(y: 1, x: 2)
}