Gato GraphQL vs WPGraphQL
Gato GraphQL ile WPGraphQL arasındaki karşılaştırma


Yalnızca headless bir WordPress sitesi oluşturmanız ve bunu statik olarak dağıtmanız gerekiyorsa ve şu anda WPGraphQL kullanıyorsanız, Gato GraphQL'e geçmek herhangi bir fark yaratmayacaktır.
Aksi takdirde, Gato GraphQL'e geçmek pek çok avantaj sağlar. Aşağıdakiler, WPGraphQL'in sunmadığı ancak Gato GraphQL + tüm eklentilerin sağladığı faydaları listelemektedir.
Özet tablo
| Özellik | Gato GraphQL | WPGraphQL |
|---|---|---|
| N+1 Sorgu Problemi | Mimari tasarım sayesinde sorun oluşturmaz | Yönetilmezse sorun olabilir; geliştirici farkında olmalıdır |
| Güvenlik: Endpoint Devre Dışı Bırakma | Persisted queries ile tek endpoint tamamen devre dışı bırakılabilir (PRO) | Sunulmaz |
| Erişim Kontrolü | Alan alan doğrulama, roller/yetkiler/IP ile, kullanıcı arayüzü üzerinden (PRO) | Alan düzeyinde değil, daha az ayrıntılı |
| Önbellek Kontrolü | queries için max-age otomatik hesaplanır (PRO) | Otomatik önbellek kontrolü yoktur |
| Özel Endpoint'ler | Birden fazla, şifreyle korunan/özelleştirilebilir endpoint; endpoint hiyerarşisi desteklenir (PRO) | Tek endpoint, özelleştirme sınırlıdır |
| Toplu Güncellemeler ve Bul/Değiştir | GraphQL üzerinden toplu silme, etiketleme, değiştirme (regex ile) (PRO) | Sağlanmaz |
| Özel/Deneysel GraphQL Özellikleri | İç içe mutations, şema adlandırma alanı, oneOf input object | Çoğunlukla standart GraphQL spec'i |
| Multiple Query Execution (Bileşilebilirlik) | Tek belgede birden fazla queries, @export ile durum paylaşımı | Toplu queries (istek başına birden fazla), ancak durum paylaşımı yapılamaz |
| Dahili/Özel Endpoint'ler | Yalnızca backend/PHP için özel endpoint, kullanıcılara açık değil (PRO) | Mevcut değil |
| Zengin Veri Mutation'ı | Tek belgede veriyi alma, değiştirme ve kaydetme (PRO) | Desteklenmez |
| İçerik Senkronizasyonu ve Dağıtımı | GraphQL, RSS, CSV, REST API üzerinden içe/dışa aktarma (PRO) | Sağlanmaz |
| Web Servisi Entegrasyonu | Giden/gelen API çağrıları ve webhook'lar (PRO) | Desteklenmez |
| Otomasyon (Hook/İş Akışları) | İş akışı otomasyonu olarak GraphQL (PRO/kullanıcı arayüzü editörü) | Mevcut değil |
| Kullanım Kolaylığı (Kullanıcı Arayüzü Entegrasyonu) | GraphQL queries oluşturmak/yönetmek için kapsamlı kullanıcı arayüzü özellikleri | Daha temel yönetim arayüzü |
| Toplu İşleme/Bileşilebilirlik | Alan/direktif oluşturma, yeniden kullanılabilir çözümleyici mantığı (PRO) | Desteklenmez |
| Multiple Query Execution | Paylaşılan durum ve bağımlılıklarla desteklenir | Desteklenir, durum paylaşımı yoktur |
| Standart Headless/Statik Kullanım | Her ikisi de eşit derecede yeteneklidir | Her ikisi de eşit derecede yeteneklidir |
Etiketler:
- (PRO): Özelliğin Gato GraphQL için ücretli/pro sürüm/eklentiler gerektirdiğini belirtir.
Temel noktaların özeti:
- Gato GraphQL, gelişmiş geliştirme, otomasyon ve güvenlik için önemli ek özellikler sunar
- Her iki eklenti de temel statik/headless WordPress kurulumları için eşdeğerdir
- Gato GraphQL'deki gelişmiş özellikler şunlara odaklanır:
- Ayrıntılı kontrol
- İş akışı otomasyonu
- Zengin entegrasyonlar
- Modern deneysel GraphQL özellikleri
Geliştirme kolaylığı
Geliştiricilerin "n+1" queries problemi hakkında endişelenmesine gerek yoktur: GraphQL sunucusunun mimari tasarımı sayesinde, bu sorun yaşanmaz.
Güvenlik
Önceden tanımlanmış verileri açığa çıkarmak için persisted queries kullanıldığında, GraphQL tek endpoint'ini tamamen devre dışı bırakabilirsiniz; böylece kimliği doğrulanmış kullanıcılar bile buna erişemez.

Erişim kontrolü
Yalnızca oturum açmış kullanıcıların, belirli bir role veya yetkiye sahip kullanıcıların ya da belirli bir IP aralığından gelen ziyaretçilerin verilere erişebileceğini, alan alan bazında doğrulayabilirsiniz (PRO).

Önbellek kontrolü
Standart HTTP önbelleğe alma kullanılarak GraphQL yanıtı önbelleğe alındığında, max-age başlığı GraphQL sorgusundaki tüm alanlardan otomatik olarak hesaplanır (PRO).

Endpoint özelleştirme ve yönetimi
Her biri belirli bir müşteriye veya uygulamaya özelleştirilmiş, şifreyle korunan birden fazla özel endpoint sağlayabilirsiniz.
Ayrıca bunlara özel kategoriler ekleyebilir ve hiyerarşi verebilirsiniz (örneğin /graphql/customers/some-customer ve /graphql/customers/another-customer).

Toplu güncellemeler
Toplu güncellemeler gerçekleştirebilirsiniz. Örneğin, sitedeki tüm yorumları silebilir veya tüm yazılarınıza bir etiket ya da kategori atayabilirsiniz.
Ayrıca yüzlerce yazıda bir dizgiyi arayıp değiştirebilirsiniz; örneğin eski alan adını yeni alan adıyla değiştirmek ya da regex kullanmak için (PRO).
Özel GraphQL özellikleri
Spec için önerilmiş ancak henüz yayınlanmamış yeni GraphQL özelliklerine erişim elde edersiniz; bunlar arasında iç içe mutations, şema adlandırma alanı ve 'oneOf' Input Object yer alır.

Multiple Query Execution
WPGraphQL, tek bir HTTP isteğinde birden fazla GraphQL queries'nin çözümlendiği toplu queries çalıştırılmasına olanak tanır.
Gato GraphQL, tek bir GraphQL belgesinin birden fazla işlem yürütebildiği Multiple Query Execution özelliğini sunar.
Multiple Query Execution, toplu queries yürütmeye göre bir gelişmedir; çünkü işlemler @export direktifi aracılığıyla birbirleriyle durum paylaşabilir.
Örneğin, bir yazıyı çoğaltmak için bir query işlemi yazı verilerini alır ve bu verileri yeni bir yazı oluşturan mutation işlemine aktarır:
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}Bileşilebilirlik
Bir alanın değerinin aynı queries içindeki başka bir alana girdi olarak sağlanabildiği alan oluşturma özelliğine sahip olacaksınız; bu sayede temel bir alan çözümleyici seti sınırsız sayıda kullanım senaryosunu karşılayabilir (PRO).
Örneğin, Post.hasExcerpt alanını oluşturmak yerine, aynı değeri üretmek için Post.excerpt üzerinde _notEmpty alanını uygulayabiliriz:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}Benzer şekilde, bir direktifin alanın değerinden iç bir özelliğe uygulanabilmesi için direktif oluşturabilirsiniz.
Örneğin, aşağıdaki queries yazının kategori adlarını başka bir dile çevirir:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}GraphQL sunucu erişilebilirliği
Gutenberg bloklarınızı beslemek için özel endpoint'ler açığa çıkarabilirsiniz. Ayrıca herhangi bir genel endpoint açığa çıkarmadan PHP kodu kullanarak uygulamanız için veri almak amacıyla özel bir GraphQL sunucusuna erişebilirsiniz (PRO).
Veri mutation'ında çok yönlülük
GraphQL'i kullanarak sitenizin içeriğini tek bir GraphQL belgesi içinde alabilir, değiştirebilir ve tekrar kaydedebilirsiniz (PRO).
Örneğin, bir yazıdaki tüm Gutenberg bloklarını alabilir, özelliklerini çıkarabilir, bu dizeleri Google Translate API aracılığıyla çevirebilir, bu dizeleri bloğa geri ekleyebilir ve yazıyı tekrar kaydedebilirsiniz.
İçerik senkronizasyonu ve dağıtımı
GraphQL'i kullanarak başka bir WordPress sitesinden yazı aktarabilir, bir RSS beslemesinden, bir CSV'den ya da herhangi bir REST veya GraphQL API'sinden içerik alabilirsiniz (PRO).
İçeriği başka bir WordPress sitesine aktarabilir ve JSON ile CSV olarak kaydedebilirsiniz (PRO).
Web servisi etkileşimi
Herhangi bir harici servisin API'sini bir HTTP istemcisi aracılığıyla çağırabilirsiniz (PRO). Örneğin, WordPress kullanıcılarınızı Mailchimp e-posta listenize abone edebilirsiniz.
Ayrıca özel bir webhook aracılığıyla herhangi bir servisten gelen verileri alıp işleyebilirsiniz (PRO). Örneğin, bir InstaWP sandbox sitesinde kayıtlı bülten e-postalarını yakalayabilir ve bunları otomatik olarak Mailchimp'e gönderebilirsiniz.
Otomasyon
GraphQL'i kullanarak görevleri ve içerik iş akışlarını otomatikleştirebilirsiniz (PRO).
Örneğin, yeni bir yazı oluşturulduğunda (draft_post hook'u aracılığıyla olay) yazının küçük resmi olup olmadığını kontrol eden bir persisted query çalıştırabilir ve yoksa Stable Diffusion API'sini çağırarak bir görüntü oluşturabilir, TinyPng ile sıkıştırabilir ve son olarak görüntüyü yazının öne çıkan görseli olarak ekleyebilirsiniz.

Kullanım kolaylığı
Tüm bu ek kullanım senaryoları, herhangi bir PHP kodu dağıtmak zorunda kalmadan, doğrudan wp-admin içinde GraphQL queries bir kullanıcı arayüzü aracılığıyla sağlanarak gerçekleştirilebilir.
