Şemayı yapılandırma
Şemayı yapılandırmaİç İçe Mutation Kullanımı

İç İçe Mutation Kullanımı

İç içe mutation'lar, GraphQL'de kök türden farklı bir tür üzerinde mutation gerçekleştirmeyi mümkün kılar.

Aşağıdaki query, kök türdeki updatePost mutation alanını kullanarak standart bir mutation çalıştırır:

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

Yukarıdaki query, iç içe bir mutation aracılığıyla da çalıştırılabilir; burada post nesnesi önce post alanı üzerinden sorgulanır, ardından Post türüne ait update mutation alanı post nesnesi üzerine uygulanır:

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

Mutation'lar ayrıca iç içe yerleştirilebilir; başka bir mutation'ın sonucu üzerindeki veriler değiştirilebilir:

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

Basitleştirilmiş kök tür

İç içe mutation'lar, kök türü QueryRoot ve MutationRoot'tan, hem queries hem de mutation'ları yöneten tek bir Root türüne dönüştürür:

Şema belgelerinde iç içe mutation'lar

Mutation alanlarını görselleştirme

Mutation alanlarının hangileri olduğunu görselleştirmek için Voyager istemcisini kullanın.

İç içe mutation'lar sayesinde, şemadaki her tür hem query hem de mutation alanları içerebilir. Bunları birbirinden ayırt etmek için mutation alanının açıklamasının başına "[Mutation] " etiketi eklenir.

Örneğin, Root türü için alanlar şunlardır:

GraphiQL belgelerinde Root türü için açıklama

Endpoint'lerde iç içe mutation kullanımı

Şemanın iç içe mutation kullanıp kullanmayacağını tanımlayabileceğimiz 2 düzey bulunur. Öncelik sırasına göre:

1. Şema yapılandırmasında

Bir özel endpoint veya persisted query'nin iç içe mutation kullanması, ilgili şema yapılandırması aracılığıyla tanımlanabilir:

Şema yapılandırmasında mutation şeması

2. Ayarlarda tanımlanan varsayılan mod

Şema yapılandırmasının değeri "Default" ise, Ayarlarda tanımlanan mod kullanılır:

İç içe mutation'lar için ayarlar
İç içe mutation'lar için ayarlar

İç içe mutation'ları yapılandırma

Şema için seçebileceğimiz üç davranış vardır:

1. İç içe mutation'ları etkinleştirme

Bu seçenek, şema için iç içe mutation'ları devre dışı bırakır (bunun yerine standart davranışı kullanır).

2. İç içe mutation'ları etkinleştir, tüm mutation alanlarını kökte tut

İç içe mutation'lar etkinleştirildiğinde, mutation alanları şemaya iki kez eklenebilir:

  • bir kez Root türü altında
  • bir kez belirli tür altında

Örneğin:

  • Root.updatePost
  • Post.update

Bu seçenekle, kök türündeki "yinelenen" mutation alanları korunur.

3. İç içe mutation'ları etkinleştir, kökten gereksiz mutation alanlarını kaldır

Yukarıdakiyle aynı seçenek, ancak kök türündeki "yinelenen" mutation alanları kaldırılır.

Örneğin:

  • Root.updatePost kaldırılır
  • Post.update kullanılabilir

GraphQL spesifikasyonu

Bu işlevsellik şu an GraphQL spesifikasyonunun bir parçası değildir, ancak talep edilmiştir: