WordPress için GraphQL sunucuları

Gato GraphQL vs WPGraphQL

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

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs WPGraphQL

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

ÖzellikGato GraphQLWPGraphQL
N+1 Sorgu ProblemiMimari tasarım sayesinde sorun oluşturmazYönetilmezse sorun olabilir; geliştirici farkında olmalıdır
Güvenlik: Endpoint Devre Dışı BırakmaPersisted 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'lerBirden 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ştirGraphQL ü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'lerYalnı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 EntegrasyonuGiden/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ü özellikleriDaha temel yönetim arayüzü
Toplu İşleme/BileşilebilirlikAlan/direktif oluşturma, yeniden kullanılabilir çözümleyici mantığı (PRO)Desteklenmez
Multiple Query ExecutionPaylaşılan durum ve bağımlılıklarla desteklenirDesteklenir, durum paylaşımı yoktur
Standart Headless/Statik KullanımHer ikisi de eşit derecede yeteneklidirHer 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.

Persisted query editörü
Persisted query editörü

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).

Erişim Kontrol Listesi editörü
Erişim Kontrol Listesi editörü

Ö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).

Önbellek Kontrol Listesi editörü

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).

Şifreyle korunan Özel Endpoint
Şifreyle korunan Özel Endpoint

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.

Adlandırma alanlı etkileşimli şema
Adlandırma alanlı etkileşimli şema

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.

Otomasyon Kuralı editörü
Otomasyon Kuralı editörü

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.

Bültenimize abone olun

Gato GraphQL'deki tüm güncellemelerden haberdar olun.