GraphQL-Server für WordPress

Gato GraphQL vs WPGraphQL

Vergleich zwischen Gato GraphQL und WPGraphQL

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs WPGraphQL

Wenn du einfach eine headless WordPress-Website erstellen und statisch ausliefern möchtest und derzeit WPGraphQL verwendest, wird der Wechsel zu Gato GraphQL keinen Unterschied machen.

Ansonsten bietet der Wechsel zu Gato GraphQL viele Vorteile. Im Folgenden sind die Vorteile aufgeführt, die Gato GraphQL + alle Erweiterungen bieten und die WPGraphQL nicht hat.

Übersichtstabelle

FunktionGato GraphQLWPGraphQL
N+1-Query-ProblemKein Problem dank des ArchitekturdesignsKann ein Problem sein, wenn es nicht behandelt wird; Entwickler müssen sich dessen bewusst sein
Sicherheit: Endpoint deaktivierenKann den einzelnen Endpoint mit persisted queries vollständig deaktivieren (PRO)Nicht verfügbar
ZugriffskontrolleFeld-für-Feld-Validierung mit Rollen/Berechtigungen/IP, über UI (PRO)Nicht auf Feldebene, weniger granular
Cache-Kontrollemax-age wird automatisch für queries berechnet (PRO)Keine automatische Cache-Kontrolle
Benutzerdefinierte EndpointsMehrere, passwortgeschützte/anpassbare Endpoints; Endpoint-Hierarchie wird unterstützt (PRO)Einzelner Endpoint, eingeschränkte Anpassung
Massenaktualisierungen & Suchen/ErsetzenMassenlöschen, Tagging, Ersetzen (mit Regex), über GraphQL (PRO)Nicht verfügbar
Benutzerdefinierte/experimentelle GraphQL-FunktionenVerschachtelte Mutationen, Schema-Namespacing, oneOf Input ObjectÜberwiegend Standard-GraphQL-Spezifikation
Multiple Query Execution (Komponierbarkeit)Mehrere queries in einem Dokument, Zustandsfreigabe mit @exportBatch-queries (mehrere pro Anfrage), können aber keinen Zustand teilen
Interne/private EndpointsPrivater Endpoint nur für Backend/PHP, nicht für Benutzer zugänglich (PRO)Nicht verfügbar
Umfangreiche DatenmutationDaten in einem einzigen Dokument abrufen, ändern und speichern (PRO)Nicht unterstützt
Content-Synchronisierung & -VerteilungImport/Export über GraphQL, RSS, CSV, REST API (PRO)Nicht verfügbar
Webservice-IntegrationAusgehende/eingehende API-Aufrufe und Webhooks (PRO)Nicht unterstützt
Automatisierung (Hooks/Workflows)GraphQL als Workflow-Automatisierung (PRO/UI-Editor)Nicht verfügbar
Benutzerfreundlichkeit (UI-Integration)Umfangreiche UI-Funktionen zum Erstellen/Verwalten von GraphQL-queriesGrundlegendere Admin-UI
Batching/KomponierbarkeitFelder/Direktiven zusammenstellen, wiederverwendbare Resolver-Logik (PRO)Nicht unterstützt
Multiple Query ExecutionUnterstützt, mit gemeinsamem Zustand und AbhängigkeitenUnterstützt, ohne Zustandsfreigabe
Standard Headless/Static-NutzungBeide sind gleichwertigBeide sind gleichwertig

Legende:

  • (PRO): Gibt an, dass die Funktion eine kostenpflichtige/Pro-Version oder Erweiterungen von Gato GraphQL erfordert.

Zusammenfassung der wichtigsten Punkte:

  • Gato GraphQL bietet bedeutende zusätzliche Funktionen für fortgeschrittene Entwicklung, Automatisierung und Sicherheit
  • Beide Plugins sind für grundlegende statische/headless WordPress-Installationen gleichwertig
  • Die erweiterten Funktionen von Gato GraphQL konzentrieren sich auf:
    • Feinkörnige Kontrolle
    • Workflow-Automatisierung
    • Umfangreiche Integrationen
    • Moderne experimentelle GraphQL-Funktionen

Entwicklerfreundlichkeit

Entwickler müssen sich keine Gedanken über das „n+1"-Query-Problem machen: Aufgrund des Architekturdesigns des GraphQL-Servers tritt es einfach nicht auf.

Sicherheit

Wenn du persisted queries verwendest, um vordefinierte Daten bereitzustellen, kannst du den einzelnen GraphQL-Endpoint vollständig deaktivieren, sodass er auch für authentifizierte Benutzer nicht zugänglich ist.

Persisted-Query-Editor
Persisted-Query-Editor

Zugriffskontrolle

Du kannst sicherstellen, dass nur eingeloggte Benutzer, oder Benutzer mit einer bestimmten Rolle oder Berechtigung, oder Besucher aus einem bestimmten IP-Bereich, auf Daten zugreifen können, auf Feld-für-Feld-Basis (PRO).

Editor der Zugriffskontrollliste
Editor der Zugriffskontrollliste

Cache-Kontrolle

Wenn du die GraphQL-Antwort mit Standard-HTTP-Caching zwischenspeicherst, wird der max-age-Header automatisch aus allen in der GraphQL-Query vorhandenen Feldern berechnet (PRO).

Editor der Cache-Kontrollliste

Endpoint-Anpassung und -Verwaltung

Du kannst mehrere benutzerdefinierte Endpoints bereitstellen, die jeweils auf einen bestimmten Kunden oder eine bestimmte Anwendung zugeschnitten sind, und sie per Passwort schützen.

Und du kannst ihnen benutzerdefinierte Kategorien hinzufügen und ihnen eine Hierarchie geben (z. B. /graphql/customers/some-customer und /graphql/customers/another-customer).

Passwortgeschützter benutzerdefinierter Endpoint
Passwortgeschützter benutzerdefinierter Endpoint

Massenaktualisierungen

Du kannst Aktualisierungen in großem Umfang durchführen. Zum Beispiel kannst du alle Kommentare auf der Website löschen oder allen deinen Beiträgen ein Tag oder eine Kategorie zuweisen.

Und du kannst eine Zeichenkette in Hunderten von Beiträgen suchen und ersetzen, zum Beispiel um die alte Domain durch die neue zu ersetzen, oder sogar mit einem Regex (PRO).

Benutzerdefinierte GraphQL-Funktionen

Du erhältst Zugang zu neuen GraphQL-Funktionen, die für die Spezifikation vorgeschlagen, aber noch nicht veröffentlicht wurden, darunter verschachtelte Mutationen, Schema-Namespacing und das 'oneOf' Input Object.

Interaktives Schema mit Namespace
Interaktives Schema mit Namespace

Multiple Query Execution

WPGraphQL ermöglicht die Ausführung von queries als Batch, bei dem mehrere GraphQL-queries innerhalb einer einzigen HTTP-Anfrage aufgelöst werden.

Gato GraphQL bietet Multiple Query Execution, bei der ein einziges GraphQL-Dokument mehrere Operationen ausführen kann.

Multiple Query Execution ist eine Verbesserung gegenüber Query-Batching, da die Operationen über die @export-Direktive Zustände miteinander teilen können.

Um zum Beispiel einen Beitrag zu duplizieren, holen wir mit einer query-Operation die Beitragsdaten und übergeben diese Daten an eine mutation-Operation, die damit einen neuen Beitrag erstellt:

query GetPostAndExportData($postId: ID!)
{
  post(by: { id: $postId }, status: any) {
    author {
      id @export(as: "authorID")
    }
    categories {
      id @export(as: "categoryIDs", type: LIST)
    }
    rawContent @export(as: "rawContent")
    rawExcerpt @export(as: "excerpt")
    featuredImage {
      id @export(as: "featuredImageID")
    }
    tags {
      id @export(as: "tagIDs", type: LIST)
    }
    rawTitle @export(as: "title")
  }
}
 
mutation DuplicatePost
  @depends(on: "GetPostAndExportData")
{
  createPost(input: {
    status: draft,
    authorBy: {
      id: $authorID
    },
    categoriesBy: {
      ids: $categoryIDs
    },
    contentAs: {
      html: $rawContent
    },
    excerpt: $excerpt
    featuredImageBy: {
      id: $featuredImageID
    },
    tagsBy: {
      ids: $tagIDs
    },
    title: $title
  }) {
    postID
  }
}

Komponierbarkeit

Du hast die Möglichkeit, Felder zu kombinieren, wobei der Wert eines Feldes als Eingabe für ein anderes Feld in derselben Query verwendet werden kann, sodass ein grundlegender Satz von Feld-Resolvern eine unbegrenzte Anzahl von Anwendungsfällen abdecken kann (PRO).

Zum Beispiel können wir statt des Feldes Post.hasExcerpt das Feld _notEmpty auf Post.excerpt anwenden, um denselben Wert zu erzeugen:

query {
  post(by: { id: 1 }) {
    excerpt 
    hasExcerpt: _notEmpty(value: $__excerpt)
  }
}

Ebenso kannst du Direktiven kombinieren, sodass eine Direktive auf eine innere Eigenschaft des Feldwertes angewendet werden kann.

Zum Beispiel übersetzt die folgende Query die Kategorienamen eines Beitrags in eine andere Sprache:

query {
  post(by: { id: 1 }) {
    title
    categoryNames
    frenchCategoryNames: categoryNames
      @underEachArrayItem
        @strTranslate(
          from: "en",
          to: "fr"
        )
  }
}

Verfügbarkeit des GraphQL-Servers

Du kannst private Endpoints bereitstellen, um deine Gutenberg-Blöcke zu betreiben. Und du kannst auf einen privaten GraphQL-Server zugreifen, um Daten für deine Anwendung per PHP-Code abzurufen, ohne einen öffentlich zugänglichen Endpoint bereitzustellen (PRO).

Vielseitigkeit bei der Datenmutation

Du kannst GraphQL verwenden, um Inhalte deiner Website abzurufen, zu ändern und schließlich wieder zu speichern – alles in einem einzigen GraphQL-Dokument (PRO).

Zum Beispiel kannst du alle Gutenberg-Blöcke in einem Beitrag abrufen, ihre Eigenschaften extrahieren, diese Zeichenketten über die Google Translate API übersetzen, diese Zeichenketten wieder in den Block einfügen und den Beitrag erneut speichern.

Content-Synchronisierung und -Verteilung

Du kannst GraphQL verwenden, um Beiträge von einer anderen WordPress-Website zu importieren, aus einem RSS-Feed, aus einer CSV-Datei oder aus einer beliebigen REST- oder GraphQL-API (PRO).

Du kannst Inhalte auf eine andere WordPress-Website exportieren und als JSON und CSV speichern (PRO).

Webservice-Interaktion

Du kannst die API eines beliebigen externen Dienstes über einen HTTP-Client aufrufen (PRO). Zum Beispiel kannst du deine WordPress-Benutzer in deine Mailchimp-E-Mail-Liste eintragen.

Und du kannst eingehende Daten von einem beliebigen Dienst empfangen und verarbeiten über einen dedizierten Webhook (PRO). Zum Beispiel kannst du die in einer InstaWP-Sandbox-Website registrierten Newsletter-E-Mails erfassen und automatisch an Mailchimp senden.

Automatisierung

Du kannst GraphQL verwenden, um Aufgaben und Content-Workflows zu automatisieren (PRO).

Zum Beispiel kannst du, wenn ein neuer Beitrag erstellt wird (Ereignis über den Hook draft_post), eine persisted query ausführen, die prüft, ob der Beitrag kein Miniaturbild hat und in diesem Fall ein Bild durch Aufruf der Stable Diffusion API generiert, es über TinyPng komprimiert und schließlich als Beitragsbild einfügt.

Editor für Automatisierungsregeln
Editor für Automatisierungsregeln

Benutzerfreundlichkeit

Alle diese zusätzlichen Anwendungsfälle können direkt im wp-admin umgesetzt werden, indem du die GraphQL-Query über eine Benutzeroberfläche eingibst, ohne PHP-Code bereitstellen zu müssen.

Abonniere unseren Newsletter

Bleib über alle Updates zu Gato GraphQL auf dem Laufenden.