Utiliser les mutations imbriquées
Les mutations imbriquées permettent d'effectuer des mutations sur un type autre que le type racine dans GraphQL.
La requête ci-dessous exécute une mutation standard, en utilisant le champ de mutation updatePost depuis le type racine :
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}La requête ci-dessus peut également être exécutée via une mutation imbriquée, où l'objet post est d'abord interrogé via le champ post, puis le champ de mutation update, qui appartient au type Post, est appliqué sur l'objet post :
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}Les mutations peuvent également être imbriquées, en modifiant des données sur le résultat d'une autre mutation :
mutation {
createPost(input: {
title: "First title"
}) {
status
postID
post {
update(input: {
title: "Second title",
contentAs: { html: "Some content" }
}) {
status
post {
title
content
addComment(input: {
commentAs: { html: "My first comment" }
}) {
status
commentID
comment {
content
date
}
}
}
}
}
}
}Type racine simplifié
Les mutations imbriquées changent le type racine, de QueryRoot et MutationRoot, vers un unique type Root gérant à la fois les requêtes et les mutations :

Visualiser les champs de mutation
Utilisez le client Voyager pour visualiser quels sont les champs de mutation.
Avec les mutations imbriquées, chaque type dans le schéma peut contenir à la fois des champs de requête et de mutation. Pour les différencier, la description du champ de mutation est précédée du label "[Mutation] ".
Par exemple, voici les champs pour le type Root :

Utiliser les mutations imbriquées dans les endpoints
Il existe 2 niveaux auxquels nous pouvons définir si le schéma utilisera les mutations imbriquées ou non. Par ordre de priorité :
1. Dans la configuration du schéma
Faire qu'un custom endpoint ou une persisted query utilise les mutations imbriquées peut être défini via la configuration du schéma correspondante :

2. Mode par défaut, défini dans les Réglages
Si la configuration du schéma a la valeur "Default", elle utilisera le mode défini dans les Réglages :

Configurer les mutations imbriquées
Il existe trois comportements que nous pouvons choisir pour le schéma :
1. Ne pas activer les mutations imbriquées
Cette option désactive les mutations imbriquées (en utilisant le comportement standard à la place) pour le schéma.
2. Activer les mutations imbriquées, en conservant tous les champs de mutation dans la racine
Lorsque les mutations imbriquées sont activées, les champs de mutation peuvent être ajoutés deux fois au schéma :
- une fois sous le type
Root - une fois sous le type spécifique
Par exemple :
Root.updatePostPost.update
Avec cette option, les champs de mutation « dupliqués » du type racine sont conservés.
3. Activer les mutations imbriquées, en supprimant les champs de mutation redondants de la racine
Même option que ci-dessus, mais en supprimant les champs de mutation « dupliqués » du type racine.
Par exemple :
Root.updatePostest suppriméPost.updateest disponible
Spécification GraphQL
Cette fonctionnalité ne fait actuellement pas partie de la spécification GraphQL, mais elle a été demandée :