Usando mutations aninhadas
As mutations aninhadas permitem realizar mutations em um tipo diferente do tipo raiz no GraphQL.
A query abaixo executa uma mutation padrão, usando o campo de mutation updatePost do tipo raiz:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}A query acima também pode ser executada por meio de uma mutation aninhada, onde o objeto post é primeiro consultado pelo campo post, e então o campo de mutation update, que pertence ao tipo Post, é aplicado sobre o objeto post:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}As mutations também podem ser aninhadas, modificando dados no resultado de outra 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 raiz simplificado
As mutations aninhadas alteram o tipo raiz, de QueryRoot e MutationRoot para um único tipo Root que lida com queries e mutations:

Visualizando campos de mutation
Use o cliente Voyager para visualizar quais são os campos de mutation.
Com mutations aninhadas, cada tipo no schema pode conter tanto campos de query quanto campos de mutation. Para diferenciá-los, a descrição do campo de mutation é precedida pela etiqueta "[Mutation] ".
Por exemplo, estes são os campos do tipo Root:

Usando mutations aninhadas nos endpoints
Existem 2 níveis nos quais podemos definir se o schema utilizará mutations aninhadas ou não. Em ordem de prioridade:
1. Na configuração do schema
Fazer com que um custom endpoint ou uma persisted query utilize mutations aninhadas pode ser definido por meio da configuração de schema correspondente:

2. Modo padrão, definido nas Configurações
Se a configuração do schema tiver o valor "Default", ela usará o modo definido nas Configurações:

Configurando mutations aninhadas
Existem três comportamentos que podemos escolher para o schema:
1. Não habilitar mutations aninhadas
Esta opção desabilita as mutations aninhadas (usando o comportamento padrão) para o schema.
2. Habilitar mutations aninhadas, mantendo todos os campos de mutation na raiz
Quando as mutations aninhadas estão habilitadas, os campos de mutation podem ser adicionados duas vezes ao schema:
- uma vez sob o tipo
Root - uma vez sob o tipo específico
Por exemplo:
Root.updatePostPost.update
Com esta opção, os campos de mutation "duplicados" do tipo raiz são mantidos.
3. Habilitar mutations aninhadas, removendo os campos de mutation redundantes da raiz
Mesma opção acima, mas removendo os campos de mutation "duplicados" do tipo raiz.
Por exemplo:
Root.updatePosté removidoPost.updateestá disponível
Especificação do GraphQL
Esta funcionalidade não faz parte atualmente da especificação do GraphQL, mas foi solicitada: