🎉 Gato GraphQL v0.7 yayınlandı; mutations ve nested mutations desteğiyle!
Gato GraphQL'ın mutations ve nested mutations desteği sunan 0.7 sürümü yayınlandı! 🎉

İşte yeni eklemeleri gösteren bir tur.
1. Mutations! 🚀
GraphQL mutations, query aracılığıyla veri değiştirmeyi (yani yan etki üretmeyi) mümkün kılar.
Mutations, Gato GraphQL'de eksik olan en önemli unsurdu. Artık eklendiğine göre, bu GraphQL sunucusunun neredeyse tam özellikli olduğunu söyleyebilirim (yalnızca subscriptions eksik ve bunları nasıl ekleyeceğimi zaten düşünüyorum).

Yorum ekleme konusunda bir örneğe bakalım. Ama önce, yorum ekleyebilmeniz için giriş yapmanızı sağlayacak başka bir mutation çalıştırmamız gerekiyor. Aşağıdaki GraphiQL istemcisindeki "Run" düğmesine basarak önceden oluşturulmuş bir test kullanıcısıyla loginUser mutation alanını çalıştırın:
mutation LogUserIn {
loginUser(
by: { credentials: { usernameOrEmail: "test", password: "pass" } }
) {
id
name
}
}Şimdi birkaç yorum ekleyelim. Aşağıdaki Run düğmesine basarak addCommentToCustomPost mutation alanını çalıştırıp bir gönderiye yorum ekleyin (yorum metnini de düzenleyebilirsiniz):
mutation AddComment {
addCommentToCustomPost(
input: { customPostID: 1459, comment: "Adding a comment: bla bla bla" }
) {
id
content
date
}
}Bu ilk sürümde plugin aşağıdaki mutations ile birlikte gelir:
✅ createPost
✅ updatePost
✅ setFeaturedImageforCustomPost
✅ removeFeaturedImageforCustomPost
✅ addCommentToCustomPost
✅ replyComment
✅ loginUser
✅ logoutUser
2. Nested Mutations! 🚀🚀
Nested mutations, GraphQL'de root type dışındaki bir türde mutations gerçekleştirebilme yeteneğidir.
GraphQL spesifikasyonu için talep edilmiş ancak henüz onaylanmamışlardır (ve belki hiç onaylanmayacaklar); bu nedenle Gato GraphQL, Nested Mutations modülü aracılığıyla bunları isteğe bağlı bir özellik olarak destekler.
Dolayısıyla plugin 2 davranışı destekler:
- Varsayılan olarak standart GraphQL davranışı (yani mutation alanlarının root type'a eklenmesi)
- İsteğe bağlı olarak nested mutations
Örneğin, yukarıdaki query aşağıdaki query ile de çalıştırılabilir; bu sürümde önce Root.post aracılığıyla gönderiyi alır, ardından Post.addComment aracılığıyla ona yorum ekleriz:
mutation AddComment {
post(by: { id: 1459 }) {
addComment(
input: {
comment: "Notice how field `addCommentToCustomPost` under the `Root` type is renamed as `addComment` under the `Post` type? The schema got neater!"
}
) {
id
content
date
}
}
}Mutations, başka bir mutation'ın sonucundaki verileri de değiştirebilir. Aşağıdaki query'de önce Root.post aracılığıyla gönderiyi alır, ardından üzerinde Post.addComment mutation'ını çalıştırarak oluşturulan yorum nesnesini elde eder ve son olarak üzerinde Comment.reply mutation'ını çalıştırırız:
mutation AddCommentAndResponse {
post(by: { id: 1459 }) {
id
title
addComment(input: { comment: "Isn't this awesome?" }) {
id
date
content
reply(input: { comment: "I think so!" }) {
id
date
content
}
}
}
}Bu kesinlikle kullanışlı! 😍 (Bu aynı davranışı tek bir query'de üretmenin alternatif yöntemi @export direktifi aracılığıyladır... Her ikisini de yaklaşan bir blog yazısında karşılaştıracağım).
Bu ilk sürümde plugin aşağıdaki mutations ile birlikte gelir:
✅ CustomPost.update
✅ CustomPost.setFeaturedImage
✅ CustomPost.removeFeaturedImage
✅ CustomPost.addComment
✅ Comment.reply
Standart mı, nested mi? Yoksa her ikisi de mi?
Hem kendi uygulamanız tarafından kullanılan hem de müşterileriniz için genel olarak erişilebilir bir GraphQL API'niz olabilir. Nested mutations'ı yalnızca kendi uygulamanız için etkinleştirmek, müşterileriniz için etkinleştirmemek isteyebilirsiniz; çünkü bu standart dışı bir özelliktir.
İyi haber: yapabilirsiniz.
Custom Endpoints ve Persisted Queries için şemayı özelleştirmede kullanılan Schema Configuration'a bir "Mutation Scheme" bölümü ekledim:

Dolayısıyla nested mutations'ı her yerde devre dışı bırakabilir, ancak yalnızca uygulamanızın kullanacağı belirli bir custom endpoint için etkinleştirebilirsiniz. 💪
Root type'tan gereksiz alanların kaldırılması
Nested mutations ile mutation alanları şemaya iki kez eklenebilir:
- bir kez root type altında
- bir kez belirli tür altında
Örneğin şu alanlar birbirinin "kopyası" olarak değerlendirilebilir:
Root.updatePostPost.update
Gato GraphQL, her ikisini de tutmanıza ya da gereksiz olan root type altındakileri kaldırmanıza olanak tanır.
Aşağıdaki 3 şema:
- Standart davranış:
queries içinQueryRoottürünü ve mutations içinMutationRoottürünü kullanır - Duplicate mutation alanlarını koruyan nested mutations:
tek birRoottürü queries ve mutations'ı yönetir; bu türdeki gereksiz mutation alanları korunur - Root type'tan gereksiz mutation alanlarını kaldıran nested mutations:
yukarıdakiyle aynı, ancakRoottüründeki tüm gereksiz mutation alanları kaldırılır
✱ Not1: bu 3 şemanın tamamı aynı endpoint'i kullanır; yalnızca ?mutation_scheme URL parametresini standard, nested ve lean_nested değerleriyle değiştirerek. Bu mümkündür çünkü GraphQL sunucusu code-first yaklaşımını izler. 🤟
✱ Not2: bu seçenekler Schema configuration'daki "Mutation Scheme" bölümünde (yukarıda gösterilmiştir) seçilebilir; dolayısıyla bireysel custom endpoint'ler ve persisted queries için hangi davranışın uygulanacağına da karar verebilirsiniz. 👏
Artık v0.8 için hazırlık yapma zamanı! 🙏