
Fonctionnalité :
Input object 'oneOf'
Input object 'oneOf'
L'input object oneOf est un type particulier d'input object, où exactement l'un des champs d'entrée doit être fourni comme entrée, sinon le serveur retourne une erreur de validation. Ce comportement introduit le polymorphisme pour les entrées en GraphQL, nous permettant de concevoir des schémas plus propres.
Par exemple, récupérer un utilisateur dans notre application pourrait se faire via différentes propriétés, comme l'identifiant ou l'adresse e-mail de l'utilisateur. Pour ce faire, nous aurions normalement besoin de créer un champ séparé pour chaque propriété :
type Query {
userByID(id: ID!): User
userByEmail(email: String!): User
}Grâce à l'input object oneOf, nous pouvons à la place avoir un seul champ user qui accepte toutes les propriétés via un input object oneOf UserByInput, en sachant qu'une seule des propriétés (soit l'identifiant, soit l'adresse e-mail) peut et doit être fournie :
type Query {
user(by: UserByInput!): User
}
input UserByInput @oneOf {
id: ID
email: String
}Dans la requête, nous fournissons la valeur d'entrée pour exactement l'une des propriétés :
{
tom: user(by: {
id: 1
}) {
name
}
jerry: user(by: {
email: "jerry@warnerbros.com"
}) {
name
}
}