Persisted Queries
Persisted QueriesPersisted Queries

Persisted Queries

Included in the “Power Extensions” bundle

Verwende GraphQL-queries, um vordefinierte Endpoints wie in REST zu erstellen und dabei die Vorteile beider APIs zu nutzen.

Beschreibung

Mit REST erstellst du mehrere Endpoints, von denen jeder einen vordefinierten Datensatz zurĂŒckgibt.

VorteileNachteile
✅ Es ist einfach❌ Es ist mĂŒhsam, alle Endpoints zu erstellen
✅ Zugriff ĂŒber GET oder POST❌ Ein Projekt kann auf EngpĂ€sse stoßen, wĂ€hrend auf die Fertigstellung der Endpoints gewartet wird
✅ Kann auf dem Server oder CDN gecacht werden❌ Die Erstellung von Dokumentation ist obligatorisch
✅ Es ist sicher: Nur vorgesehene Daten werden bereitgestellt❌ Es kann langsam sein (vor allem bei mobilen Apps), da die Anwendung möglicherweise mehrere Anfragen benötigt, um alle Daten abzurufen

Mit GraphQL stellst du eine beliebige query an einen einzigen Endpoint, der genau die angeforderten Daten zurĂŒckgibt.

VorteileNachteile
✅ Kein Under- oder Over-Fetching von Daten❌ Zugriff nur ĂŒber POST
✅ Es kann schnell sein, da alle Daten in einer einzigen Anfrage abgerufen werden❌ Es kann nicht auf dem Server oder CDN gecacht werden, was es langsamer und teurer macht als nötig
✅ Es ermöglicht schnelle Iteration des Projekts❌ Kann erfordern, das Rad neu zu erfinden, z. B. beim Hochladen von Dateien oder beim Caching
✅ Es kann selbst-dokumentierend sein❌ Muss mit zusĂ€tzlichen KomplexitĂ€ten umgehen, wie dem N+1-Problem
✅ Es stellt einen Editor fĂŒr die query (GraphiQL) bereit, der die Aufgabe vereinfacht 

Persisted queries kombinieren diese 2 AnsÀtze:

  • Sie verwenden GraphQL, um queries zu erstellen und aufzulösen
  • Aber anstatt einen einzigen Endpoint bereitzustellen, stellen sie jede vordefinierte query unter ihrem eigenen Endpoint bereit

So erhalten wir mehrere Endpoints mit vordefinierten Daten wie in REST, die aber mit GraphQL erstellt wurden – und so die Vorteile beider AnsĂ€tze nutzen und deren Nachteile vermeiden:

VorteileNachteile
✅ Zugriff ĂŒber GET oder POST❌ Es ist mĂŒhsam, alle Endpoints zu erstellen
✅ Kann auf dem Server oder CDN gecacht werden❌ Ein Projekt kann auf EngpĂ€sse stoßen, wĂ€hrend auf die Fertigstellung der Endpoints gewartet wird
✅ Es ist sicher: Nur vorgesehene Daten werden bereitgestellt❌ Die Erstellung von Dokumentation ist obligatorisch
✅ Kein Under- oder Over-Fetching von Daten❌ Es kann langsam sein (vor allem bei mobilen Apps), da die Anwendung möglicherweise mehrere Anfragen benötigt, um alle Daten abzurufen
✅ Es kann schnell sein, da alle Daten in einer einzigen Anfrage abgerufen werden❌ Zugriff nur ĂŒber POST
✅ Es ermöglicht schnelle Iteration des Projekts❌ Es kann nicht auf dem Server oder CDN gecacht werden, was es langsamer und teurer macht als nötig
✅ Es kann selbst-dokumentierend sein❌ Kann erfordern, das Rad neu zu erfinden, z. B. beim Hochladen von Dateien oder beim Caching
✅ Es stellt einen Editor fĂŒr die query (GraphiQL) bereit, der die Aufgabe vereinfacht❌ Muss mit zusĂ€tzlichen KomplexitĂ€ten umgehen, wie dem N+1-Problem đŸ‘ˆđŸ» dieses Problem ist vom zugrunde liegenden Engine gelöst

Editor fĂŒr persisted queries

AusfĂŒhren der Persisted Query

Sobald die persisted query veröffentlicht ist, können wir sie ĂŒber ihren Permalink ausfĂŒhren.

Die persisted query kann direkt im Browser ausgefĂŒhrt werden, da sie ĂŒber GET aufgerufen wird, und wir erhalten die angeforderten Daten im JSON-Format:

AusfĂŒhren einer persisted query im Browser

Erstellen einer Persisted Query

Wenn du auf den Link Persisted Queries im MenĂŒ klickst, wird die Liste aller erstellten persisted queries angezeigt:

Persisted queries mit Beschreibung
Persisted queries mit Beschreibung

Eine persisted query ist ein Custom Post Type (CPT). Um eine neue persisted query zu erstellen, klicke auf die SchaltflÀche "Add New GraphQL persisted query", die den WordPress-Editor öffnet:

Erstellen einer neuen Persisted Query

Die Haupteingabe ist der GraphiQL-Client, der standardmĂ€ĂŸig mit dem Explorer geliefert wird. Durch Klicken auf die Felder im linken Seitenbereich werden sie zur query hinzugefĂŒgt, und durch Klicken auf die SchaltflĂ€che "Run" wird die query ausgefĂŒhrt:

GraphiQL Explorer

Wenn die query fertig ist, veröffentliche sie – ihr Permalink wird dann zu ihrem Endpoint. Der Link zum Endpoint (und zur Quelle) wird im Seitenbereich "Persisted Query Endpoint Overview" angezeigt:

Persisted Query Endpoint Overview

Durch AnhÀngen von ?view=source an den Permalink werden die persisted query und ihre Konfiguration angezeigt (sofern der Nutzer eingeloggt ist und die Nutzerrolle Zugriff darauf hat):

Quelle der persisted query

StandardmĂ€ĂŸig hat der Endpoint der persisted query den Pfad /graphql-query/, und dieser Wert ist ĂŒber die Einstellungen konfigurierbar:

Einstellungen fĂŒr Persisted queries
Einstellungen fĂŒr Persisted queries

Schema-Konfiguration

Was das Schema enthÀlt und welchen Zugriff Nutzer darauf haben, wird in der Schema-Konfiguration festgelegt.

Daher mĂŒssen wir eine Schema-Konfiguration erstellen und sie dann aus dem Dropdown auswĂ€hlen:

Schema-Konfiguration auswÀhlen

Persisted Queries nach Kategorie organisieren

Im Seitenbereich "Endpoint categories" können wir Kategorien hinzufĂŒgen, um die Verwaltung der Persisted Query zu erleichtern:

Endpoint-Kategorien beim Bearbeiten einer Persisted Query

Zum Beispiel können wir Kategorien erstellen, um Endpoints nach Kunde, Anwendung oder anderen erforderlichen Informationen zu verwalten:

Liste der Endpoint-Kategorien

In der Liste der Persisted Queries können wir ihre Kategorien einsehen, und durch Klicken auf einen Kategorie-Link oder Verwendung des Filters oben werden nur die EintrÀge dieser Kategorie angezeigt:

Liste der Persisted Queries mit ihren Kategorien

Private persisted queries

Durch Setzen des Status der Persisted Query auf private kann der Endpoint nur vom Admin-Nutzer aufgerufen werden. Dies verhindert, dass unsere Daten unbeabsichtigt mit Nutzern geteilt werden, die keinen Zugriff darauf haben sollten.

Zum Beispiel können wir private Persisted Queries erstellen, die bei der Verwaltung der Anwendung helfen, wie etwa das Abrufen von Daten zur Erstellung von Berichten mit unseren Metriken.

Private Persisted Query

PasswortgeschĂŒtzte persisted queries

Wenn wir eine Persisted Query fĂŒr einen bestimmten Kunden erstellen, können wir ihr ein Passwort zuweisen, um eine zusĂ€tzliche Sicherheitsstufe zu bieten und sicherzustellen, dass nur dieser Kunde auf den Endpoint zugreifen kann.

PasswortgeschĂŒtzte Persisted Query

Beim ersten Zugriff auf eine passwortgeschĂŒtzte persisted query erscheint ein Bildschirm, der nach dem Passwort fragt:

PasswortgeschĂŒtzte Persisted Query: Erster Zugriff

Erst nachdem das Passwort eingegeben und validiert wurde, erhÀlt der Nutzer Zugriff auf den vorgesehenen Endpoint.

Die persisted query ĂŒber URL-Parameter dynamisch machen

Der Wert jeder Variable kann beim AusfĂŒhren der persisted query ĂŒber einen URL-Parameter (mit dem Variablennamen) festgelegt werden. Wenn die Option "Überschreiben URL-Parameter die Variablen?" aktiviert ist, hat der URL-Parameter Vorrang. Andernfalls hat der im Variablen-Dictionary definierte Wert Vorrang (falls vorhanden).

In dieser query wird beispielsweise die Anzahl der Ergebnisse ĂŒber die Variable $limit gesteuert, mit einem Standardwert von 3:

Verwendung von Variablen in der persisted query

Beim AusfĂŒhren dieser persisted query mit dem Parameter ?limit=5 wird die query mit 5 Ergebnissen ausgefĂŒhrt:

Überschreiben des Variablenwerts in der persisted query