Gato GraphQL vs WP REST API
Gato GraphQL ile WP REST API karşılaştırması


REST ve GraphQL API'ları arasındaki genel farklar, WP REST API ile Gato GraphQL karşılaştırılırken de geçerlidir.
GraphQL ile bir endpoint'e özelleştirilmiş bir GraphQL query çalıştırabilir, hangi verilere ihtiyaç duyduğunuzu belirtebilir ve yalnızca o verileri tek bir istekte alabilirsiniz.
Örneğin, aşağıdaki GraphQL query belirli bir yazının gerekli verilerini, ilişkilerinden (yazar, kategoriler ve etiketler) gelen veriler dahil olmak üzere tek bir istekte alır:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}REST ile aynı verileri almak için önce yazı verilerini almak üzere bir istek, ardından ilişkilerinin (yazar, kategoriler ve etiketler) her biri için verilerini almak üzere ayrı birer istek göndermeniz gerekebilir.
REST ve GraphQL arasındaki bu mimari farklar başka yerlerde geniş çapta ele alınmıştır, bu nedenle burada tekrarlamayacağız.
Aşağıda, Gato GraphQL + tüm uzantılar ile WP REST API arasında daha ayrıntılı bir karşılaştırma yapalım.
Özet tablo
| Özellik | Gato GraphQL | WP REST API |
|---|---|---|
| Veri Alma | Özelleştirilmiş GraphQL queries çalıştırarak tek bir istekte belirli verileri alır. | İlişkili verileri almak için farklı endpoint'lere birden fazla istek gönderilmesi gerekir (ör. yazı verisi, yazar verisi, kategoriler ve etiketler). |
| Endpoint'ler | Persisted Queries destekler; bunlar, GraphQL dili kullanılarak wp-admin içindeki bir kullanıcı arayüzü üzerinden oluşturulan ve kod dağıtımı gerektirmeyen önceden tanımlanmış verili endpoint'lerdir. | Verileri REST endpoint'leri aracılığıyla sunar; her birinin kendi URL'si ve önceden tanımlanmış verileri vardır, PHP kodu ile oluşturulur ve bir tema ya da eklenti içinde dağıtılır. |
| Erişim Denetimi | Kurallara dayalı alan düzeyinde erişim denetimiyle esneklik sağlar (ör. kullanıcı rolleri, yetenekler, IP aralığı). | context parametresine göre verileri kısıtlar (ör. kimliği doğrulanmamış kullanıcılar için view, izinli kimliği doğrulanmış kullanıcılar için edit). |
| Toplu İşlemler | Multiple Query Execution destekler; tek bir GraphQL belgesi, @export direktifi aracılığıyla durum paylaşabilen birden fazla işlem çalıştırabilir; bu özellik toplu isteklerin geliştirilmiş halidir. | Toplu isteklere izin verir; birden fazla istek tek bir HTTP isteği içinde dahili olarak karşılanır. |
| Site Yönetimi | Kullanıcı arayüzleri aracılığıyla tek bir GraphQL belgesi içinde veri alabilir, değiştirebilir ve geri kaydedebilir; WordPress sitelerinin otomasyonunu ve yönetimini sağlar. Çoğaltma, otomasyon, yedekleme, arama/değiştirme, webhook ve çeviri gibi birden fazla eklentinin görevlerini yerine getirebilir. Hem bir API hem de çok daha fazlasıdır. | Öncelikle WordPress verilerine erişmek ve bunları değiştirmek için bir API'dır. |
| Genellik | WordPress sitelerini yönetmek için genel amaçlı bir araçtır; GraphQL queries aracılığıyla veri mutation'ı ve üçüncü taraf hizmetlerle entegrasyon yapabilir. | Bir API sunmaya odaklanır; benzer işlevlere ulaşmak için ek eklentiler veya özel kod gerektirir. |
Temel noktaların özeti:
- Veri Alma: Gato GraphQL özelleştirilmiş queries kullanır, WP REST API ise birden fazla endpoint isteği kullanır.
- Endpoint'ler: Gato GraphQL, kullanıcı arayüzü üzerinden oluşturulan persisted queries kullanır; WP REST API ise PHP kodlu REST endpoint'leri kullanır.
- Erişim Denetimi: Gato GraphQL alan düzeyinde denetim sunarken WP REST API context parametresini kullanır.
- Toplu İşlemler: Gato GraphQL Multiple Query Execution kullanır, WP REST API ise toplu istekler kullanır.
- Site Yönetimi: Gato GraphQL kapsamlı bir araçtır, WP REST API ise öncelikle bir API'dır.
Önceden tanımlanmış verilere erişim
WP REST API ile verileri REST endpoint'leri aracılığıyla sunarsınız. Her endpoint'in kendi URL'si vardır ve verileri önceden tanımlanmıştır (yazılar veya kullanıcılar gibi ilgili kaynaklar için).
REST endpoint'lerine benzer şekilde, Gato GraphQL da önceden tanımlanmış verili endpoint'ler olan Persisted Queries destekler. GET ile bir persisted query talep etmek, depolanan GraphQL query'yi çalıştırır ve beklenen JSON yanıtını üretir:

Aralarındaki fark şudur: REST API endpoint'leri PHP kodu ile oluşturulur ve bir tema ya da eklenti içinde dağıtılmak zorundadır; oysa Gato GraphQL persisted queries, GraphQL dili kullanılarak oluşturulur ve herhangi bir kod dağıtımına gerek kalmadan wp-admin içindeki bir kullanıcı arayüzü (WordPress editörü tarafından desteklenen) aracılığıyla yayımlanır.

Aynı önbellekleme mekanizmaları hem REST endpoint'lerine hem de GraphQL persisted queries'e uygulanabilir. Persisted query kendi endpoint'i üzerinden erişildiğinden, yanıtı standart HTTP önbellekleme kullanılarak önbelleğe alınabilir (PRO).
Erişim denetimi
WP REST API'de veri kısıtlaması context parametresine bağlıdır. ?context=view geçirmek kimliği doğrulanmamış kullanıcılar için veri üretir; ?context=edit ise kimliği doğrulanmış kullanıcılar için (doğru izinlerle) content.raw alanı gibi ek veriler içerir.
Gato GraphQL çok daha fazla esneklik sunar; her alanın Erişim Denetimi kurallarına göre erişilebilir olup olmadığı ayrı ayrı belirlenir. Yalnızca oturum açmış kullanıcıların, belirli bir rol ya da yeteneğe sahip kullanıcıların veya belirli bir IP aralığından ziyaretçilerin belirli bir alana erişebileceğini doğrulayabilirsiniz (PRO).

Toplu işlemler
WP REST API, toplu istekler çalıştırmaya izin verir; bu isteklerde birden fazla istek tek bir HTTP isteği içinde dahili olarak karşılanır.
Gato GraphQL ise Multiple Query Execution sunar; bu sayede tek bir GraphQL belgesi birden fazla işlem çalıştırabilir.
Multiple Query Execution, toplu isteklere 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 bir 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
}
}WordPress sitesini yönetme
Gato GraphQL, veritabanından veri almamıza, gerektiği şekilde değiştirmemize ve geri kaydetmemize olanak tanır; bunların tümü tek bir GraphQL belgesi içinde gerçekleşir.
Bu, GraphQL queries oluşturup yayımlamak, endpoint'leri gerektiği şekilde yapılandırmak ve bir olay gerçekleştiğinde query çalıştırılmasını otomatikleştirmek için kullanıcı arayüzleri aracılığıyla sağlanır.
Tüm bunlar, Gato GraphQL'in WordPress sitelerimizi yönetmek için genel amaçlı bir araç olduğu anlamına gelir; bu araç, verilerin (ister WordPress sitesinden ister üçüncü taraf hizmetler tarafından sağlansın) mutation'a tabi tutulması gereken kullanım durumlarını karşılar; zira bu, bir GraphQL query çalıştırılarak gerçekleştirilebilir.
Gato GraphQL'in birden fazla eklentinin işlevselliğini nasıl sunabildiğine dikkat edin:
- Bir çoğaltma eklentisi değildir, ancak bununla yazıları çoğaltabilirsiniz.
- Bir otomasyon eklentisi değildir, ancak hiçbir kısıtlama olmaksızın görevlerinizi otomatikleştirebilirsiniz.
- Bir yedekleme eklentisi değildir, ancak yazıları içe aktarabilir ve dışa aktarabilirsiniz.
- Bir arama ve değiştirme eklentisi değildir, ancak yazılarınızı toplu olarak değiştirebilirsiniz.
- Bir webhook eklentisi veya HTTP istemcisi değildir, ancak hem herhangi bir API'ye istek gönderebilir hem de herhangi bir hizmetten gelen istekleri alıp işleyebilirsiniz.
- Bir çeviri eklentisi değildir, ancak herhangi bir içeriği çevirebilirsiniz.
WP REST API yalnızca bir API'dır.
Gato GraphQL de bir API'dır, ancak çok daha fazlası.
