🎯 Félicitations : votre plugin WordPress vient de devenir une fonctionnalité "core"
Parce que la WP REST API est déjà incluse dans le core de WordPress, j'ai souvent conseillé d'éviter GraphQL, et d'utiliser simplement la REST API pour alimenter en données nos plugins WordPress et blocs Gutenberg.
Plus maintenant. WordPress 6.5 vient d'être publié, incluant une incroyable nouvelle fonctionnalité : Plugin Dependencies.
Avec Plugin Dependencies, tout plugin WordPress disponible dans le répertoire de plugins peut être défini comme une dépendance pour notre plugin, et WordPress installera cette dépendance juste avant d'installer notre plugin.
Par conséquent, chaque plugin du répertoire devient essentiellement une fonctionnalité "core", car il sera implicitement installé chaque fois qu'un autre plugin en aura besoin.
Certaines applications sont à la fois évidentes et pas vraiment nécessaires, comme le fait qu'un add-on WooCommerce déclare une dépendance à WooCommerce, puisque le propriétaire du site utilise certainement déjà WooCommerce.
Mais lorsque le plugin requis fournit des "outils" pour un autre plugin, et que nous ne pouvons pas nous attendre à ce que le propriétaire du site ait déjà ce plugin installé (ou même connaisse son existence), le résultat peut être vraiment impactant.
C'est le cas avec GraphQL, et Gato GraphQL.
GraphQL devient une fonctionnalité "core" dans WordPress
GraphQL est une interface pour récupérer, modifier et stocker à nouveau n'importe quelle donnée du site WordPress. Tout plugin ayant besoin d'interagir avec des données (et pratiquement tous le font) peut potentiellement utiliser GraphQL pour satisfaire ses besoins.
GraphQL est un "outil". Et Gato GraphQL est le fournisseur d'outils.
En faisant déclarer à votre plugin une dépendance à Gato GraphQL, le serveur GraphQL sera immédiatement disponible pour l'usage propre de votre plugin.
Par exemple, vous pouvez alors utiliser GraphQL pour récupérer des données pour les blocs Gutenberg de votre plugin, et éviter de créer (et de maintenir) des contrôleurs REST.
Pour la première fois, les développeurs de plugins peuvent maintenant considérer GraphQL comme une véritable alternative à la WP REST API.
La dépendance au plugin pourrait-elle devenir un problème ?
Comme le plugin installé en tant que dépendance apparaîtra dans le wp-admin, le propriétaire du site non averti pourrait légitimement se demander : "D'où ça vient ? Ai-je été piraté ? Est-ce du spam ? Que se passe-t-il ici ?"
Si le propriétaire du site était contrarié, ce serait préoccupant car aucun plugin ne peut se permettre d'antagoniser ses utilisateurs (du moins, jusqu'à ce qu'ils comprennent ce qui se passe, et accueillent la solution).
Cette situation pourrait également être améliorée, voire complètement évitée. Par exemple, en considérant Gato GraphQL comme la dépendance du plugin, Gato GraphQL pourrait aussi avoir un plugin en version Lite, qui installe simplement un serveur GraphQL pour un usage interne uniquement, non visible via l'interface. (Une autre tâche pour ma liste de choses à faire ! 🤷🏻♂️)
Une question plus importante pour Gato GraphQL (et d'autres plugins aussi) est : Le nouveau site deviendrait-il moins sécurisé ?
En particulier pour Gato GraphQL : Un endpoint GraphQL public exposera-t-il des données auxquelles tout visiteur peut accéder, et qui pourrait exposer involontairement des données privées ?
La réponse est non. Gato GraphQL n'active pas par défaut l'endpoint unique public, donc il peut être installé sans crainte de risques de sécurité.
Ajouter Gato GraphQL comme dépendance de plugin
Mettons-nous maintenant au travail, et jouons avec cette formidable nouvelle fonctionnalité.
Pour pouvoir utiliser GraphQL dans votre plugin, vous devrez déclarer gatographql comme dépendance de plugin dans l'en-tête du plugin :
/**
* Plugin Name: Blocks for cooking recipes
* Requires Plugins: gatographql
*/Votre plugin peut alors accéder aux données via l'endpoint interne blockEditor, disponible sous la constante JavaScript GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT dans le wp-admin, qui pointe vers cette URL :
https://mysite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=blockEditorPar exemple, le bloc peut récupérer des données en utilisant du code JavaScript comme ceci :
(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));
}
})();Si vous souhaitez pouvoir utiliser les mutations imbriquées dans vos requêtes GraphQL, vous pouvez également créer un endpoint interne exclusif à votre plugin, et le configurer en conséquence.