Mengonfigurasi skema
Mengonfigurasi skemaMenggunakan nested mutations

Menggunakan nested mutations

Nested mutations memungkinkan untuk melakukan mutations pada tipe selain tipe root dalam GraphQL.

Query di bawah ini mengeksekusi mutation standar, menggunakan field mutation updatePost dari tipe root:

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

Query di atas juga dapat dieksekusi melalui nested mutation, di mana objek post pertama-tama di-query melalui field post, kemudian field mutation update, yang termasuk dalam tipe Post, diterapkan pada objek post tersebut:

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

Mutations juga dapat bersarang, memodifikasi data pada hasil dari mutation lain:

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
            }
          }
        }
      }
    }
  }
}

Tipe root yang disederhanakan

Nested mutations mengubah tipe root, dari QueryRoot dan MutationRoot, menjadi satu tipe Root tunggal yang menangani baik queries maupun mutations:

Nested mutations dalam dokumentasi skema

Memvisualisasikan field mutation

Gunakan klien Voyager untuk memvisualisasikan field-field mutation.

Dengan nested mutations, setiap tipe dalam skema dapat mengandung field query maupun mutation. Untuk membedakannya, deskripsi field mutation diawali dengan label "[Mutation] ".

Misalnya, berikut adalah field-field untuk tipe Root:

Deskripsi untuk tipe Root dalam dokumentasi GraphiQL

Menggunakan nested mutations di endpoint

Ada 2 level di mana kita dapat menentukan apakah skema akan menggunakan nested mutations atau tidak. Berdasarkan urutan prioritas:

1. Pada konfigurasi skema

Membuat custom endpoint atau persisted query menggunakan nested mutations dapat didefinisikan melalui konfigurasi skema yang sesuai:

Skema mutation dalam konfigurasi skema

2. Mode default, didefinisikan di Pengaturan

Jika konfigurasi skema memiliki nilai "Default", maka akan menggunakan mode yang didefinisikan di Pengaturan:

Pengaturan untuk nested mutations
Pengaturan untuk nested mutations

Mengonfigurasi nested mutations

Ada tiga perilaku yang dapat kita pilih untuk skema:

1. Tidak mengaktifkan nested mutations

Opsi ini menonaktifkan nested mutations (menggunakan perilaku standar sebagai gantinya) untuk skema.

2. Aktifkan nested mutations, pertahankan semua field mutation di root

Ketika nested mutations diaktifkan, field mutation dapat ditambahkan dua kali ke dalam skema:

  • sekali di bawah tipe Root
  • sekali di bawah tipe spesifik

Misalnya:

  • Root.updatePost
  • Post.update

Dengan opsi ini, field mutation yang "terduplikasi" dari tipe root tetap dipertahankan.

3. Aktifkan nested mutations, hapus field mutation yang redundan dari root

Opsi yang sama seperti di atas, tetapi menghapus field mutation yang "terduplikasi" dari tipe root.

Misalnya:

  • Root.updatePost dihapus
  • Post.update tersedia

Spesifikasi GraphQL

Fungsionalitas ini saat ini bukan bagian dari spesifikasi GraphQL, namun telah diminta: