Un champ se résoudra à null lorsqu'une erreur est rencontrée lors de sa résolution. Cela inclut les erreurs de validation comme celle que vous rencontrez. Selon la spécification :
Si lors de l'exécution de ExecuteSelectionSet() un champ avec un fieldType non nul lance une erreur de champ, alors cette erreur doit se propager à cet ensemble de sélection entier, se résolvant à null si cela est autorisé ou se propageant plus loin à un champ parent.
Si cela se produit, tout champ frère qui n'a pas encore été exécuté ou n'a pas encore renvoyé de valeur peut être annulé pour éviter un travail inutile.
En d'autres termes, si un champ parent est d'un certain type d'objet, et que ce type a un champ non nullable, et que ce champ se résout à null, ce champ parent se résoudra également à null. Le champ parent ne peut pas renvoyer un objet invalide (dans ce cas parce qu'il avait un champ non nullable renvoyé à null), donc la seule chose qu'il puisse faire est de renvoyer null. Bien sûr, si le champ parent lui-même est non nullable, ce comportement est propagé dans l'arborescence jusqu'à ce qu'un champ nullable soit finalement rencontré.
Alors, pourquoi obtenez-vous cette erreur ? Parce que votre résolveur pour operatingAirline
ne renvoie pas null. Il renvoie un genre d'objet (soit un objet airline incomplet, un tableau, une chaîne ou autre chose) que GraphQL essaie alors effectivement de coercer en type Airline
. Le champ id a été demandé, mais il se résout à null en fonction de l'objet renvoyé par le résolveur de operatingAirline
. Puisque le champ id
a été demandé et renvoyé à null, le champ operatingAirline
entier échoue à la validation et renvoie null.