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:

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:

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:

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

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.updatePostPost.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.updatePostjest usuwanyPost.updatejest dostępny
Specyfikacja GraphQL
Ta funkcjonalność nie jest obecnie częścią specyfikacji GraphQL, ale została zgłoszona jako propozycja: