ネストされたmutationの使用
ネストされたmutationを使用すると、GraphQLのルート型以外の型に対してmutationを実行できます。
以下のクエリは、ルート型のmutationフィールド updatePost を使用した標準的なmutationを実行します:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}上記のクエリは、ネストされたmutationでも実行できます。まずフィールド post でpostオブジェクトを取得し、次に Post 型に属するmutationフィールド update をpostオブジェクトに適用します:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}mutationをネストして、別の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
}
}
}
}
}
}
}簡略化されたルート型
ネストされたmutationにより、ルート型が QueryRoot と MutationRoot から、クエリとmutationの両方を処理する単一の Root 型に変わります:

mutationフィールドの可視化
Voyagerクライアントを使用して、どのフィールドがmutationフィールドであるかを可視化できます。
ネストされたmutationでは、スキーマ内のすべての型にクエリフィールドとmutationフィールドの両方を含めることができます。区別するために、mutationフィールドの説明にはラベル "[Mutation] " が先頭に付加されます。
たとえば、Root 型のフィールドは次のようになります:

エンドポイントでのネストされたmutationの使用
スキーマがネストされたmutationを使用するかどうかは、2つのレベルで定義できます。優先順位の高い順に:
1. スキーマ設定での定義
カスタムエンドポイントまたはpersisted queryがネストされたmutationを使用するようにするには、対応するスキーマ設定で定義します:

2. 設定で定義されたデフォルトモード
スキーマ設定の値が "Default" の場合、設定で定義されたモードが使用されます:

ネストされたmutationの設定
スキーマに対して選択できる動作は3つあります:
1. ネストされたmutationを有効にしない
このオプションは、スキーマのネストされたmutationを無効にします(代わりに標準の動作を使用します)。
2. ネストされたmutationを有効にし、すべてのmutationフィールドをルートに残す
ネストされたmutationが有効な場合、mutationフィールドはスキーマに2回追加される可能性があります:
Root型の下に1回- 特定の型の下に1回
たとえば:
Root.updatePostPost.update
このオプションでは、ルート型からの「重複した」mutationフィールドが保持されます。
3. ネストされたmutationを有効にし、ルートから冗長なmutationフィールドを削除する
上記と同じオプションですが、ルート型から「重複した」mutationフィールドを削除します。
たとえば:
Root.updatePostは削除されますPost.updateが利用可能です
GraphQL仕様
この機能は現在GraphQL仕様には含まれていませんが、要望が寄せられています: