Optional Undefined Arguments
In GraphQL, input types can be optional which means that the client can either:
- Not specify a value at all
- Send null explictly
- Send the non-null type
Optional input types are represented as nullable parameters in Kotlin
fun optionalInput(value: String?): String? = value
query OptionalInputQuery {
undefined: optionalInput
null: optionalInput(value: null)
foo: optionalInput(value: "foo")
}
By default, if an optional input value is not specified, then the execution engine will set the argument in Kotlin to null
.
This means that you can not tell, by just the value alone, whether the request did not contain any argument or the client explicitly passed in null
.
Instead, you should inspect the DataFetchingEnvironment where you can see if the request had the variable defined and even check parent arguments as well.
fun optionalInput(value: String?, dataFetchingEnvironment: DataFetchingEnvironment): String =
if (dataFetchingEnvironment.containsArgument("value")) {
"The value was $value"
} else {
"The value was undefined"
}