🎯 Glückwunsch: Dein WordPress-Plugin ist gerade zu einem "Core"-Feature geworden
Da die WP REST API bereits im WordPress-Core enthalten ist, habe ich oft empfohlen, GraphQL zu meiden und stattdessen einfach die REST API zu verwenden, um unsere WordPress-Plugins und Gutenberg-Blöcke mit Daten zu versorgen.
Das ist jetzt vorbei. WordPress 6.5 wurde gerade veröffentlicht, einschließlich eines unglaublichen neuen Features: Plugin Dependencies.
Mit Plugin Dependencies kann jedes WordPress-Plugin, das in der Plugin-Directory verfügbar ist, als Abhängigkeit für unser Plugin definiert werden, und WordPress installiert diese Abhängigkeit direkt vor der Installation unseres Plugins.
Als Konsequenz wird jedes Plugin in der Directory im Wesentlichen zu einem "Core"-Feature, da es implizit installiert wird, wann immer ein anderes Plugin es benötigt.
Einige Anwendungsfälle sind sowohl offensichtlich als auch nicht wirklich notwendig, zum Beispiel wenn ein WooCommerce-Add-on eine Abhängigkeit von WooCommerce deklariert, da der Website-Betreiber WooCommerce mit großer Wahrscheinlichkeit bereits nutzt.
Wenn das benötigte Plugin jedoch "Tooling" für ein anderes Plugin bereitstellt und wir nicht erwarten können, dass der Website-Betreiber dieses Plugin bereits installiert hat (oder überhaupt von seiner Existenz weiß), kann das Ergebnis wirklich bedeutend sein.
Das ist der Fall bei GraphQL und Gato GraphQL.
GraphQL wird zu einem "Core"-Feature in WordPress
GraphQL ist eine Schnittstelle zum Abrufen, Ändern und erneuten Speichern beliebiger Daten von der WordPress-Website. Jedes Plugin, das mit Daten interagieren muss (und das tun so gut wie alle), kann GraphQL potenziell nutzen, um seine Anforderungen zu erfüllen.
GraphQL ist "Tooling". Und Gato GraphQL ist der Tooling-Anbieter.
Indem dein Plugin eine Abhängigkeit von Gato GraphQL deklariert, steht der GraphQL-Server sofort für die eigene Nutzung durch dein Plugin zur Verfügung.
Du kannst GraphQL zum Beispiel nutzen, um Daten für die Gutenberg-Blöcke deines Plugins abzurufen, und vermeidest so das Erstellen (und Pflegen) von REST-Controllern.
Zum ersten Mal überhaupt können Plugin-Entwickler GraphQL jetzt als echte Alternative zur WP REST API in Betracht ziehen.
Könnte die Plugin-Abhängigkeit zum Problem werden?
Da das als Abhängigkeit installierte Plugin in der wp-admin erscheint, könnte der ahnungslose Website-Betreiber zu Recht fragen: „Woher kommt das? Wurde ich gehackt? Ist das Spam? Was ist hier los?"
Wenn der Website-Betreiber verärgert wäre, wäre das beunruhigend, da sich kein Plugin es leisten kann, seine Nutzer zu verprellen (zumindest so lange nicht, bis sie verstehen, was passiert, und die Lösung begrüßen).
Diese Situation könnte auch verbessert oder sogar vollständig vermieden werden. Wenn man beispielsweise Gato GraphQL als Plugin-Abhängigkeit betrachtet, könnte Gato GraphQL auch ein Lite-Plugin haben, das lediglich einen GraphQL-Server für die interne Verwendung installiert, der nicht über die Benutzeroberfläche sichtbar ist. (Eine weitere Aufgabe für meine TODO-Liste! 🤷🏻♂️)
Eine wichtigere Frage für Gato GraphQL (und andere Plugins da draußen) ist: Würde die neue Website weniger sicher?
Speziell für Gato GraphQL: Würde ein öffentlicher GraphQL-Endpunkt Daten preisgeben, auf die jeder Besucher zugreifen kann und die unbeabsichtigt private Daten offenlegen könnten?
Die Antwort ist nein. Gato GraphQL aktiviert den öffentlichen Single-Endpunkt standardmäßig nicht, sodass es ohne Angst vor Sicherheitsrisiken installiert werden kann.
Gato GraphQL als Plugin-Abhängigkeit hinzufügen
Jetzt werden wir die Hände schmutzig und spielen mit diesem großartigen neuen Feature.
Um GraphQL in deinem Plugin nutzen zu können, musst du gatographql als Plugin-Abhängigkeit im Plugin-Header deklarieren:
/**
* Plugin Name: Blocks for cooking recipes
* Requires Plugins: gatographql
*/Dein Plugin kann dann über den internen blockEditor-Endpunkt auf Daten zugreifen, der unter der JavaScript-Konstante GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT in der wp-admin verfügbar ist und auf diese URL verweist:
https://mysite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=blockEditorZum Beispiel kann der Block mit JavaScript-Code wie diesem Daten abrufen:
(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));
}
})();Wenn du in deinen GraphQL queries verschachtelte Mutations verwenden möchtest, kannst du auch einen internen Endpunkt erstellen, der exklusiv für dein Plugin ist, und ihn entsprechend konfigurieren.