Использование вложенных мутаций
Вложенные мутации позволяют выполнять мутации для типа, отличного от корневого типа в GraphQL.
Запрос ниже выполняет стандартную мутацию, используя поле мутации updatePost корневого типа:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}Приведённый выше запрос можно также выполнить через вложенную мутацию, где объект post сначала запрашивается через поле post, а затем поле мутации update, принадлежащее типу Post, применяется к объекту post:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}Мутации также могут быть вложенными, изменяя данные на основе результата другой мутации:
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
}
}
}
}
}
}
}Упрощённый корневой тип
Вложенные мутации изменяют корневой тип: вместо QueryRoot и MutationRoot используется единый тип Root, обрабатывающий как queries, так и мутации:

Визуализация полей мутации
Используйте клиент Voyager для визуализации полей мутации.
При использовании вложенных мутаций каждый тип в схеме может содержать как поля запросов, так и поля мутаций. Для их различия описание поля мутации начинается с метки "[Mutation] ".
Например, вот поля для типа Root:

Использование вложенных мутаций в эндпоинтах
Существует 2 уровня, на которых можно определить, будет ли схема использовать вложенные мутации. В порядке приоритета:
1. В конфигурации схемы
Использование вложенных мутаций для custom endpoint или persisted query можно настроить через соответствующую конфигурацию схемы:

2. Режим по умолчанию, заданный в настройках
Если конфигурация схемы имеет значение "Default", будет использоваться режим, заданный в настройках:

Настройка вложенных мутаций
Для схемы можно выбрать одно из трёх поведений:
1. Не включать вложенные мутации
Этот параметр отключает вложенные мутации (вместо них используется стандартное поведение) для схемы.
2. Включить вложенные мутации, сохраняя все поля мутаций в корне
Когда вложенные мутации включены, поля мутаций могут добавляться в схему дважды:
- один раз в тип
Root - один раз в конкретный тип
Например:
Root.updatePostPost.update
При этом параметре «дублирующиеся» поля мутаций корневого типа сохраняются.
3. Включить вложенные мутации, удаляя избыточные поля мутаций из корня
Тот же параметр, что и выше, но «дублирующиеся» поля мутаций удаляются из корневого типа.
Например:
Root.updatePostудаляетсяPost.updateдоступен
Спецификация GraphQL
В настоящее время эта функциональность не является частью спецификации GraphQL, однако соответствующий запрос существует: