Sử dụng nested mutations
Nested mutations cho phép thực hiện mutations trên một kiểu khác với kiểu gốc trong GraphQL.
Câu queries dưới đây thực thi một mutation tiêu chuẩn, sử dụng trường mutation updatePost từ kiểu gốc:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}Câu queries ở trên cũng có thể được thực thi thông qua một nested mutation, trong đó đối tượng post được truy vấn trước qua trường post, sau đó trường mutation update, thuộc kiểu Post, được áp dụng lên đối tượng post:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}Các mutations cũng có thể được lồng nhau, chỉnh sửa dữ liệu trên kết quả của một mutation khác:
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
}
}
}
}
}
}
}Kiểu gốc được đơn giản hóa
Nested mutations thay đổi kiểu gốc, từ QueryRoot và MutationRoot, thành một kiểu Root duy nhất xử lý cả queries lẫn mutations:

Trực quan hóa các trường mutation
Sử dụng client Voyager để trực quan hóa các trường mutation.
Với nested mutations, mọi kiểu trong schema đều có thể chứa cả trường query lẫn trường mutation. Để phân biệt chúng, phần mô tả của trường mutation được thêm tiền tố "[Mutation] ".
Ví dụ, đây là các trường của kiểu Root:

Sử dụng nested mutations trong các endpoint
Có 2 cấp độ mà chúng ta có thể xác định liệu schema có sử dụng nested mutations hay không. Theo thứ tự ưu tiên:
1. Trong cấu hình schema
Việc để một custom endpoint hoặc persisted query sử dụng nested mutations có thể được xác định thông qua cấu hình schema tương ứng:

2. Chế độ mặc định, được xác định trong Cài đặt
Nếu cấu hình schema có giá trị "Default", nó sẽ sử dụng chế độ được xác định trong Cài đặt:

Cấu hình nested mutations
Có ba hành vi chúng ta có thể chọn cho schema:
1. Không bật nested mutations
Tùy chọn này vô hiệu hóa nested mutations (sử dụng hành vi tiêu chuẩn thay thế) cho schema.
2. Bật nested mutations, giữ lại tất cả các trường mutation trong kiểu gốc
Khi nested mutations được bật, các trường mutation có thể được thêm hai lần vào schema:
- một lần dưới kiểu
Root - một lần dưới kiểu cụ thể
Ví dụ:
Root.updatePostPost.update
Với tùy chọn này, các trường mutation "trùng lặp" từ kiểu gốc được giữ lại.
3. Bật nested mutations, xóa các trường mutation dư thừa khỏi kiểu gốc
Tương tự tùy chọn trên, nhưng xóa các trường mutation "trùng lặp" khỏi kiểu gốc.
Ví dụ:
Root.updatePostbị xóaPost.updatekhả dụng
Đặc tả GraphQL
Chức năng này hiện chưa phải là một phần của đặc tả GraphQL, nhưng đã được đề xuất: