Настройка схемы
Настройка схемыИспользование вложенных мутаций

Использование вложенных мутаций

Вложенные мутации позволяют выполнять мутации для типа, отличного от корневого типа в 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:

Описание типа Root в документации GraphiQL

Использование вложенных мутаций в эндпоинтах

Существует 2 уровня, на которых можно определить, будет ли схема использовать вложенные мутации. В порядке приоритета:

1. В конфигурации схемы

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

Схема мутации в конфигурации схемы

2. Режим по умолчанию, заданный в настройках

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

Настройки вложенных мутаций
Настройки вложенных мутаций

Настройка вложенных мутаций

Для схемы можно выбрать одно из трёх поведений:

1. Не включать вложенные мутации

Этот параметр отключает вложенные мутации (вместо них используется стандартное поведение) для схемы.

2. Включить вложенные мутации, сохраняя все поля мутаций в корне

Когда вложенные мутации включены, поля мутаций могут добавляться в схему дважды:

  • один раз в тип Root
  • один раз в конкретный тип

Например:

  • Root.updatePost
  • Post.update

При этом параметре «дублирующиеся» поля мутаций корневого типа сохраняются.

3. Включить вложенные мутации, удаляя избыточные поля мутаций из корня

Тот же параметр, что и выше, но «дублирующиеся» поля мутаций удаляются из корневого типа.

Например:

  • Root.updatePost удаляется
  • Post.update доступен

Спецификация GraphQL

В настоящее время эта функциональность не является частью спецификации GraphQL, однако соответствующий запрос существует: