Konfigurowanie schematu
Konfigurowanie schematuUżywanie zagnieżdżonych mutations

Używanie zagnieżdżonych mutations

Zagnieżdżone mutations umożliwiają wykonywanie mutations na typie innym niż typ główny w GraphQL.

Poniższe query wykonuje standardową mutation, używając pola mutation updatePost z typu głównego:

mutation {
  updatePost(input: {
    id: 5,
    title: "New title"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      title
    }
  }
}

Powyższe query można również wykonać za pomocą zagnieżdżonej mutation, gdzie obiekt post jest najpierw pobierany przez pole post, a następnie pole mutation update, należące do typu Post, jest stosowane na obiekcie post:

mutation {
  post(by: {id: 5}) {
    update(input: {
      title: "New title"
    }) {
      status
      post {
        title
      }
    }
  }
}

Mutations mogą być również zagnieżdżane, modyfikując dane na wyniku innej 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
            }
          }
        }
      }
    }
  }
}

Uproszczony typ główny

Zagnieżdżone mutations zmieniają typ główny, z QueryRoot i MutationRoot na jeden typ Root obsługujący zarówno queries, jak i mutations:

Zagnieżdżone mutations w dokumentacji schematu

Wizualizacja pól mutation

Użyj klienta Voyager, aby zwizualizować pola mutation.

W przypadku zagnieżdżonych mutations każdy typ w schemacie może zawierać zarówno pola query, jak i pola mutation. Aby je odróżnić, opis pola mutation jest poprzedzany etykietą "[Mutation] ".

Na przykład, oto pola dla typu Root:

Opis typu Root w dokumentacji GraphiQL

Używanie zagnieżdżonych mutations w endpointach

Istnieją 2 poziomy, na których możemy zdecydować, czy schemat będzie używał zagnieżdżonych mutations. W kolejności priorytetu:

1. W konfiguracji schematu

Ustawienie, że custom endpoint lub persisted query używa zagnieżdżonych mutations, można zdefiniować przez odpowiednią konfigurację schematu:

Schemat mutation w konfiguracji schematu

2. Tryb domyślny, zdefiniowany w Ustawieniach

Jeśli konfiguracja schematu ma wartość "Default", zostanie użyty tryb zdefiniowany w Ustawieniach:

Ustawienia dla zagnieżdżonych mutations
Ustawienia dla zagnieżdżonych mutations

Konfigurowanie zagnieżdżonych mutations

Istnieją trzy zachowania, które możemy wybrać dla schematu:

1. Nie włączaj zagnieżdżonych mutations

Ta opcja wyłącza zagnieżdżone mutations (zamiast tego używa standardowego zachowania) dla schematu.

2. Włącz zagnieżdżone mutations, zachowując wszystkie pola mutation w głównym typie

Gdy zagnieżdżone mutations są włączone, pola mutation mogą być dodawane do schematu dwukrotnie:

  • raz pod typem Root
  • raz pod konkretnym typem

Na przykład:

  • Root.updatePost
  • Post.update

Przy tej opcji "zduplikowane" pola mutation z typu głównego są zachowywane.

3. Włącz zagnieżdżone mutations, usuwając nadmiarowe pola mutation z głównego typu

Ta sama opcja co powyżej, ale z usunięciem "zduplikowanych" pól mutation z typu głównego.

Na przykład:

  • Root.updatePost jest usuwany
  • Post.update jest dostępny

Specyfikacja GraphQL

Ta funkcjonalność nie jest obecnie częścią specyfikacji GraphQL, ale została zgłoszona jako propozycja: