🎯 Congratulazioni: il tuo plugin WordPress è appena diventato una funzionalità "core"
Poiché la WP REST API è già inclusa nel core di WordPress, ho spesso consigliato di evitare GraphQL e di usare semplicemente la REST API per alimentare con i dati i nostri plugin WordPress e i blocchi Gutenberg.
Non più. WordPress 6.5 è appena stato rilasciato, includendo un'incredibile nuova funzionalità: Plugin Dependencies.
Con Plugin Dependencies, qualsiasi plugin WordPress disponibile nella directory dei plugin può essere definito come dipendenza per il nostro plugin, e WordPress installerà tale dipendenza subito prima di installare il nostro plugin.
Di conseguenza, ogni plugin nella directory diventa essenzialmente una funzionalità "core", poiché verrà installato implicitamente ogni volta che un altro plugin lo richiede.
Alcune applicazioni sono al tempo stesso ovvie e non realmente necessarie, come il fatto che un add-on di WooCommerce dichiari una dipendenza da WooCommerce, dato che il proprietario del sito quasi certamente utilizza già WooCommerce.
Ma quando il plugin richiesto fornisce "strumenti" per un altro plugin, e non possiamo aspettarci che il proprietario del sito abbia già installato quel plugin (o che ne conosca persino l'esistenza), il risultato può essere davvero d'impatto.
È il caso di GraphQL e di Gato GraphQL.
GraphQL diventa una funzionalità "core" in WordPress
GraphQL è un'interfaccia per recuperare, modificare e archiviare di nuovo qualsiasi dato del sito WordPress. Qualsiasi plugin che ha bisogno di interagire con i dati (e praticamente tutti lo fanno) può potenzialmente usare GraphQL per soddisfare le proprie esigenze.
GraphQL è uno "strumento". E Gato GraphQL è il fornitore di strumenti.
Facendo dichiarare al tuo plugin una dipendenza da Gato GraphQL, il server GraphQL sarà immediatamente disponibile per l'uso del tuo plugin.
Ad esempio, puoi quindi usare GraphQL per recuperare i dati per i blocchi Gutenberg del tuo plugin ed evitare di creare (e mantenere) controller REST.
Per la prima volta in assoluto, gli sviluppatori di plugin possono ora considerare GraphQL come una vera alternativa alla WP REST API.
La dipendenza dal plugin potrebbe diventare un problema?
Poiché il plugin installato come dipendenza apparirà nella wp-admin, il proprietario del sito ignaro potrebbe legittimamente chiedersi: "Da dove viene questo? Sono stato hackerato? È spam? Cosa sta succedendo qui?"
Se il proprietario del sito si infastidisse, sarebbe preoccupante, perché nessun plugin può permettersi di antagonizzare i propri utenti (almeno finché non capiscono cosa sta succedendo e accolgono la soluzione).
Questa situazione potrebbe anche essere migliorata, o persino completamente evitata. Ad esempio, considerando Gato GraphQL come la dipendenza del plugin, Gato GraphQL potrebbe avere anche un plugin in versione Lite, che installa semplicemente un server GraphQL per uso interno soltanto, non visibile tramite l'interfaccia. (Un'altra attività per la mia lista di cose da fare! 🤷🏻♂️)
Una domanda più importante per Gato GraphQL (e anche per altri plugin là fuori) è: il nuovo sito diventerebbe meno sicuro?
In particolare per Gato GraphQL: un endpoint GraphQL pubblico esporrà dati a cui qualsiasi visitatore può accedere e che potrebbero esporre involontariamente dati privati?
La risposta è no. Gato GraphQL per impostazione predefinita non abilita l'endpoint unico pubblico, quindi può essere installato senza timore di rischi per la sicurezza.
Aggiungere Gato GraphQL come dipendenza di plugin
Mettiamoci ora al lavoro e giochiamo con questa fantastica nuova funzionalità.
Per poter usare GraphQL nel tuo plugin, dovrai dichiarare gatographql come dipendenza di plugin nell'header del plugin:
/**
* Plugin Name: Blocks for cooking recipes
* Requires Plugins: gatographql
*/Il tuo plugin può quindi accedere ai dati tramite l'endpoint interno blockEditor, disponibile sotto la costante JavaScript GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT nella wp-admin, che punta a questo URL:
https://mysite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=blockEditorAd esempio, il blocco può recuperare i dati usando codice JavaScript come questo:
(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));
}
})();Se desideri poter usare le mutation annidate nelle tue query GraphQL, puoi anche creare un endpoint interno esclusivo per il tuo plugin e configurarlo di conseguenza.