중첩 뮤테이션 사용하기
중첩 뮤테이션을 사용하면 GraphQL의 루트 타입 이외의 타입에 대해 뮤테이션을 실행할 수 있습니다.
아래 쿼리는 루트 타입의 뮤테이션 필드 updatePost를 사용하는 표준 뮤테이션을 실행합니다:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}위의 쿼리는 중첩 뮤테이션으로도 실행할 수 있습니다. 먼저 필드 post로 포스트 객체를 조회한 후, Post 타입에 속하는 뮤테이션 필드 update를 해당 포스트 객체에 적용합니다:
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 타입으로 변경됩니다:

뮤테이션 필드 시각화
Voyager 클라이언트를 사용하여 어떤 필드가 뮤테이션 필드인지 시각화할 수 있습니다.
중첩 뮤테이션에서는 스키마의 모든 타입에 쿼리 필드와 뮤테이션 필드가 모두 포함될 수 있습니다. 이를 구분하기 위해 뮤테이션 필드의 설명 앞에 "[Mutation] " 레이블이 추가됩니다.
예를 들어, Root 타입의 필드는 다음과 같습니다:

엔드포인트에서 중첩 뮤테이션 사용하기
스키마가 중첩 뮤테이션을 사용할지 여부는 2가지 레벨에서 정의할 수 있습니다. 우선순위 순서로:
1. 스키마 설정에서 정의
커스텀 엔드포인트 또는 persisted query가 중첩 뮤테이션을 사용하도록 하려면 해당 스키마 설정에서 정의할 수 있습니다:

2. 설정에서 정의된 기본 모드
스키마 설정의 값이 "Default"인 경우, 설정에서 정의된 모드가 사용됩니다:

중첩 뮤테이션 구성하기
스키마에 대해 선택할 수 있는 동작은 세 가지입니다:
1. 중첩 뮤테이션을 활성화하지 않음
이 옵션은 스키마의 중첩 뮤테이션을 비활성화합니다(대신 표준 동작을 사용합니다).
2. 중첩 뮤테이션을 활성화하고 모든 뮤테이션 필드를 루트에 유지
중첩 뮤테이션이 활성화되면 뮤테이션 필드가 스키마에 두 번 추가될 수 있습니다:
Root타입 아래에 한 번- 특정 타입 아래에 한 번
예를 들어:
Root.updatePostPost.update
이 옵션에서는 루트 타입의 "중복된" 뮤테이션 필드가 유지됩니다.
3. 중첩 뮤테이션을 활성화하고 루트에서 중복 뮤테이션 필드를 제거
위와 동일한 옵션이지만, 루트 타입에서 "중복된" 뮤테이션 필드를 제거합니다.
예를 들어:
Root.updatePost는 제거됩니다Post.update를 사용할 수 있습니다
GraphQL 사양
이 기능은 현재 GraphQL 사양에 포함되어 있지 않지만, 요청이 제기된 바 있습니다: