Utilizzare le mutation annidate
Le mutation annidate consentono di eseguire mutation su un tipo diverso dal tipo radice in GraphQL.
La query seguente esegue una mutation standard, utilizzando il campo di mutation updatePost dal tipo radice:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}La query precedente può essere eseguita anche tramite una mutation annidata, dove l'oggetto post viene prima interrogato tramite il campo post, e poi il campo di mutation update, che appartiene al tipo Post, viene applicato sull'oggetto post:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}Le mutation possono anche essere annidate, modificando dati sul risultato di un'altra 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
}
}
}
}
}
}
}Tipo radice semplificato
Le mutation annidate modificano il tipo radice, da QueryRoot e MutationRoot a un unico tipo Root che gestisce sia le query che le mutation:

Visualizzare i campi di mutation
Usa il client Voyager per visualizzare quali sono i campi di mutation.
Con le mutation annidate, ogni tipo nello schema può contenere sia campi di query che campi di mutation. Per differenziarli, la descrizione del campo di mutation è preceduta dall'etichetta "[Mutation] ".
Ad esempio, questi sono i campi per il tipo Root:

Utilizzare le mutation annidate negli endpoint
Esistono 2 livelli in cui è possibile definire se lo schema utilizzerà le mutation annidate o meno. In ordine di priorità :
1. Nella configurazione dello schema
Far sì che un custom endpoint o una persisted query utilizzi le mutation annidate può essere definito tramite la corrispondente configurazione dello schema:

2. Modalità predefinita, definita nelle Impostazioni
Se la configurazione dello schema ha il valore "Default", utilizzerà la modalità definita nelle Impostazioni:

Configurare le mutation annidate
Esistono tre comportamenti che è possibile scegliere per lo schema:
1. Non abilitare le mutation annidate
Questa opzione disabilita le mutation annidate (utilizzando invece il comportamento standard) per lo schema.
2. Abilitare le mutation annidate, mantenendo tutti i campi di mutation nella radice
Quando le mutation annidate sono abilitate, i campi di mutation possono essere aggiunti due volte allo schema:
- una volta sotto il tipo
Root - una volta sotto il tipo specifico
Ad esempio:
Root.updatePostPost.update
Con questa opzione, i campi di mutation «duplicati» del tipo radice vengono mantenuti.
3. Abilitare le mutation annidate, rimuovendo i campi di mutation ridondanti dalla radice
Stessa opzione di cui sopra, ma rimuovendo i campi di mutation «duplicati» dal tipo radice.
Ad esempio:
Root.updatePostviene rimossoPost.updateè disponibile
Specifica GraphQL
Questa funzionalità non fa attualmente parte della specifica GraphQL, ma è stata richiesta: