🎯 Tebrikler: WordPress eklentiniz az önce bir "core" özellik oldu
WP REST API, WordPress core ile birlikte zaten gönderildiğinden, GraphQL kullanmaktan kaçınmayı ve verilerimizi WordPress eklentilerimize ve Gutenberg bloklarımıza beslemek için yalnızca REST API'yi kullanmayı sık sık tavsiye etmiştim.
Artık değil. WordPress 6.5 az önce yayımlandı ve inanılmaz bir yeni özellik içeriyor: Plugin Dependencies.
Plugin Dependencies sayesinde, eklenti dizininde bulunan herhangi bir WordPress eklentisi, kendi eklentimiz için bir bağımlılık olarak tanımlanabilir; WordPress de eklentimizi kurmadan hemen önce o bağımlılığı kurar.
Sonuç olarak dizindeki her eklenti temelde bir "core" özelliğe dönüşür; zira başka herhangi bir eklenti tarafından gerektirildiğinde örtük biçimde kurulur.
Bazı uygulamalar hem açık hem de gerçekten gerekli değildir; örneğin bir WooCommerce eklentisinin WooCommerce'e bağımlılık bildirmesi böyledir, çünkü site sahibi büyük ihtimalle WooCommerce'i zaten kullanıyordur.
Ama gerekli eklenti başka bir eklenti için "araç" sağlıyorsa ve site sahibinin o eklentiyi önceden kurmuş olmasını (hatta varlığından haberdar olmasını) bekleyemiyorsak, sonuç gerçekten çarpıcı olabilir.
GraphQL ve Gato GraphQL için durum tam olarak budur.
GraphQL, WordPress'te bir "core" özellik oluyor
GraphQL, WordPress sitesindeki herhangi bir veriyi çekmek, değiştirmek ve yeniden saklamak için bir arayüzdür. Verilerle etkileşim kurması gereken her eklenti (ve neredeyse hepsi bunu yapar) ihtiyaçlarını karşılamak için GraphQL'i kullanabilir.
GraphQL bir "araç"tır. Gato GraphQL ise araç sağlayıcısıdır.
Eklentinizin Gato GraphQL'e bağımlılık bildirmesiyle birlikte GraphQL sunucusu, eklentinizin kendi kullanımı için hemen hazır hale gelir.
Örneğin, eklentinizin Gutenberg blokları için veri çekmek amacıyla GraphQL kullanabilir ve REST denetleyicileri oluşturmaktan (ve bakımını yapmaktan) kurtulabilirsiniz.
Eklenti geliştiricileri ilk kez olarak artık GraphQL'i WP REST API'ye gerçek bir alternatif olarak değerlendirebilir.
Eklenti bağımlılığı bir sorun haline gelebilir mi?
Bağımlılık olarak kurulan eklenti wp-admin'de görüneceğinden, habersiz site sahibi haklı olarak şunu merak edebilir: "Bu nereden çıktı? Hacklendim mi? Bu spam mi? Burada ne oluyor?"
Site sahibi rahatsız olursa bu endişe verici olur; zira hiçbir eklenti kullanıcılarını karşısına alamaz (en azından ne olduğunu anlayıp çözümü benimseyene kadar).
Bu durum iyileştirilebilir, hatta tamamen önlenebilir. Örneğin Gato GraphQL'i eklenti bağımlılığı olarak ele alırsak, Gato GraphQL'in aynı zamanda yalnızca dahili kullanım için bir GraphQL sunucusu kuran, kullanıcı arayüzünde görünmeyen bir Lite sürüm eklentisi olabilir. (Yapılacaklar listemde bir görev daha! 🤷🏻♂️)
Gato GraphQL (ve diğer eklentiler) için daha önemli bir soru şudur: Yeni site daha az güvenli hale gelir mi?
Özellikle Gato GraphQL için: Herkese açık bir GraphQL uç noktası, her ziyaretçinin erişebildiği ve istem dışı olarak özel verileri açığa çıkarabilecek veriler sunar mı?
Yanıt hayırdır. Gato GraphQL varsayılan olarak herkese açık tek uç noktayı etkinleştirmez; dolayısıyla güvenlik riski endişesi olmadan kurulabilir.
Gato GraphQL'i eklenti bağımlılığı olarak ekleme
Haydi kolları sıvayalım ve bu harika yeni özellikle oynayalım.
Eklentinizde GraphQL kullanabilmek için, eklenti başlığında gatographql'i eklenti bağımlılığı olarak bildirmeniz gerekir:
/**
* Plugin Name: Blocks for cooking recipes
* Requires Plugins: gatographql
*/Eklentiniz daha sonra wp-admin'de GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT JavaScript sabiti altında bulunan ve şu URL'ye işaret eden dahili blockEditor uç noktası aracılığıyla verilere erişebilir:
https://mysite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=blockEditorÖrneğin blok, aşağıdaki gibi JavaScript kodu kullanarak veri çekebilir:
(async function () {
const data = {
query: `
query GetCookingRecipeBlockData($limit: Int) {
posts(pagination: { limit: $limit }) {
id
title
author {
id
name
}
}
}
`,
variables: {
limit: 3
},
};
const response = await fetch(
GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT,
{
method: 'post',
body: JSON.stringify(data),
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'Content-Length': data.length,
},
credentials: 'include',
}
);
/**
* Execute the query, and await the response
*/
const json = await response.json();
/**
* Check if the query produced errors, otherwise use the results
*/
if (json.errors) {
console.log(JSON.stringify(json.errors));
} else {
console.log(JSON.stringify(json.data));
}
})();GraphQL queries'lerinizde iç içe mutations kullanabilmek istiyorsanız, eklentinize özel dahili bir uç nokta da oluşturabilir ve bunu uygun şekilde yapılandırabilirsiniz.