GraphQL-servers voor WordPress

Gato GraphQL vs WPGraphQL

Vergelijking tussen Gato GraphQL en WPGraphQL

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs WPGraphQL

Als je alleen een headless WordPress-site wilt bouwen en deze als statisch wilt implementeren, en je momenteel WPGraphQL gebruikt, zal overstappen naar Gato GraphQL geen enkel verschil maken.

In andere gevallen biedt overstappen naar Gato GraphQL veel voordelen. Hieronder staan de voordelen van Gato GraphQL + alle extensies die WPGraphQL niet biedt.

Overzichtstabel

FunctieGato GraphQLWPGraphQL
N+1 Query ProbleemGeen probleem dankzij het architectuurontwerpKan een probleem zijn als het niet wordt afgehandeld; de ontwikkelaar moet hiervan bewust zijn
Beveiliging: Endpoint uitschakelenKan het enkele endpoint volledig uitschakelen met persisted queries (PRO)Niet aangeboden
ToegangscontroleVeld-voor-veld validatie, met rollen/rechten/IP, via UI (PRO)Niet op veldniveau, minder granulair
Cache-controlemax-age automatisch berekend voor queries (PRO)Geen automatische cache-controle
Aangepaste endpointsMeerdere, wachtwoordbeveiligde/aanpasbare endpoints; endpointhierarchie ondersteund (PRO)Enkel endpoint, beperkte aanpassing
Bulk-updates & Zoeken/VervangenBulk verwijderen, taggen, vervangen (met regex), via GraphQL (PRO)Niet beschikbaar
Aangepaste/experimentele GraphQL-functiesGeneste mutaties, schema namespacing, oneOf input objectVoornamelijk standaard GraphQL-specificatie
Multiple Query Execution (composability)Meerdere queries in één document, staat delen met @exportBatch queries (meerdere per request), maar kunnen geen staat delen
Interne/privé-endpointsPrivé-endpoint voor backend/PHP-only, niet zichtbaar voor gebruikers (PRO)Niet beschikbaar
Uitgebreide datamutatieGegevens ophalen, wijzigen en opslaan in één document (PRO)Niet ondersteund
Content synchronisatie & distributieImporteren/exporteren via GraphQL, RSS, CSV, REST API (PRO)Niet beschikbaar
Webservice-integratieUitgaande/inkomende API-aanroepen en webhooks (PRO)Niet ondersteund
Automatisering (hooks/workflows)GraphQL als workflow-automatisering (PRO/UI-editor)Niet beschikbaar
Gebruiksgemak (UI-integratie)Uitgebreide UI-functies voor het bouwen/beheren van GraphQL queriesMeer basale beheer-UI
Batching/composabilityVelden/directives combineren, herbruikbare resolver-logica (PRO)Niet ondersteund
Multiple Query ExecutionOndersteund, met gedeelde staat en afhankelijkhedenOndersteund, geen staat delen
Standaard headless/statisch gebruikBeide zijn even capabelBeide zijn even capabel

Labels:

  • (PRO): Geeft aan dat de functie een betaalde/pro-versie of extensies voor Gato GraphQL vereist.

Samenvatting van de belangrijkste punten:

  • Gato GraphQL biedt aanzienlijk meer functies voor geavanceerde ontwikkeling, automatisering en beveiliging
  • Beide plugins zijn gelijkwaardig voor basale statische/headless WordPress-installaties
  • Geavanceerde functies in Gato GraphQL richten zich op:
    • Fijnmazige controle
    • Workflow-automatisering
    • Uitgebreide integraties
    • Moderne experimentele GraphQL-functies

Ontwikkelgemak

Ontwikkelaars hoeven zich geen zorgen te maken over het "n+1" queryprobleem: door het architectuurontwerp van de GraphQL-server komt het simpelweg niet voor.

Beveiliging

Wanneer je persisted queries gebruikt om vooraf gedefinieerde gegevens bloot te stellen, kun je het enkele GraphQL-endpoint volledig uitschakelen, zodat het zelfs niet toegankelijk is voor geauthenticeerde gebruikers.

Persisted query-editor
Persisted query-editor

Toegangscontrole

Je kunt valideren dat alleen ingelogde gebruikers, of gebruikers met een bepaalde rol of bevoegdheid, of bezoekers uit een bepaald IP-bereik, toegang hebben tot gegevens, op veld-voor-veld-basis (PRO).

Toegangscontrolelijst-editor
Toegangscontrolelijst-editor

Cache-controle

Bij het cachen van de GraphQL-respons via standaard HTTP-caching wordt de max-age-header automatisch berekend op basis van alle velden die aanwezig zijn in de GraphQL-query (PRO).

Cache-controlelijst-editor

Endpoint-aanpassing en -beheer

Je kunt meerdere aangepaste endpoints aanbieden, elk afgestemd op een specifieke klant of applicatie, en ze beveiligen met een wachtwoord.

En je kunt aangepaste categorieën toevoegen aan de endpoints, en ze een hiërarchie geven (zoals /graphql/customers/some-customer en /graphql/customers/another-customer).

Wachtwoordbeveiligd aangepast endpoint
Wachtwoordbeveiligd aangepast endpoint

Bulk-updates

Je kunt updates in bulk uitvoeren. Je kunt bijvoorbeeld alle reacties op de site verwijderen, of een tag of categorie toewijzen aan al je berichten.

En je kunt een tekenreeks in honderden berichten zoeken en vervangen, bijvoorbeeld om een oud domein te vervangen door een nieuw domein, en zelfs met een regex (PRO).

Aangepaste GraphQL-functies

Je hebt toegang tot nieuwe GraphQL-functies die zijn voorgesteld voor de specificatie maar nog niet zijn uitgebracht, waaronder geneste mutaties, schema namespacing en het 'oneOf' Input Object.

Naamruimte interactief schema
Naamruimte interactief schema

Multiple Query Execution

WPGraphQL maakt het mogelijk om queries in batch uit te voeren, waarbij meerdere GraphQL queries worden opgelost binnen één HTTP-request.

Gato GraphQL biedt Multiple Query Execution, waarbij één GraphQL-document meerdere operaties kan uitvoeren.

Multiple Query Execution is een verbetering ten opzichte van query batching, omdat de operaties staat met elkaar kunnen delen via de @export-directive.

Bijvoorbeeld, om een bericht te dupliceren, hebben we een query-operatie die de berichtgegevens ophaalt, en deze gegevens doorgeeft aan een mutation-operatie die een nieuw bericht aanmaakt:

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
  }
}

Composability

Je hebt de mogelijkheid om velden te combineren, waarbij de waarde van een veld als invoer kan worden gebruikt voor een ander veld in dezelfde query, waardoor een fundamentele set veldresolvers een onbeperkt aantal gebruiksscenario's kan dekken (PRO).

Bijvoorbeeld, in plaats van het veld Post.hasExcerpt te maken, kunnen we het veld _notEmpty toepassen op Post.excerpt om dezelfde waarde te produceren:

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

Evenzo kun je directives combineren, zodat een directive kan worden toegepast op een interne eigenschap van de waarde van een veld.

De volgende query vertaalt bijvoorbeeld de categorienamen van een bericht naar een andere taal:

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

Beschikbaarheid van GraphQL-server

Je kunt privé-endpoints aanbieden voor je Gutenberg-blokken. En je kunt toegang krijgen tot een privé-GraphQL-server, om gegevens op te halen voor je applicatie met PHP-code, zonder een publiek endpoint bloot te stellen (PRO).

Veelzijdigheid bij het muteren van gegevens

Je kunt GraphQL gebruiken om inhoud op je site op te halen, te wijzigen en vervolgens opnieuw op te slaan, alles binnen één GraphQL-document (PRO).

Je kunt bijvoorbeeld alle Gutenberg-blokken in een bericht ophalen, hun eigenschappen extraheren, die tekenreeksen vertalen via de Google Translate API, die tekenreeksen terug in het blok invoegen, en het bericht opnieuw opslaan.

Content synchronisatie en distributie

Je kunt GraphQL gebruiken om berichten te importeren van een andere WordPress-site, van een RSS-feed, van een CSV, of van een REST of GraphQL API (PRO).

Je kunt inhoud exporteren naar een andere WordPress-site en opslaan als JSON en CSV (PRO).

Webservice-interactie

Je kunt de API van een externe service aanroepen via een HTTP-client (PRO). Je kunt bijvoorbeeld je WordPress-gebruikers inschrijven op je Mailchimp-e-maillijst.

En je kunt inkomende gegevens van elke service ontvangen en verwerken via een speciale webhook (PRO). Je kunt bijvoorbeeld nieuwsbriefmails die zijn geregistreerd in een InstaWP-sandbox-site vastleggen en ze automatisch naar Mailchimp sturen.

Automatisering

Je kunt GraphQL gebruiken om taken en contentworkflows te automatiseren (PRO).

Wanneer er bijvoorbeeld een nieuw bericht wordt aangemaakt (gebeurtenis via hook draft_post), kun je een persisted query uitvoeren die controleert of het bericht geen miniatuur heeft en in dat geval een afbeelding genereert door de Stable Diffusion API aan te roepen, deze comprimeert via TinyPng, en ten slotte de afbeelding invoegt als de uitgelichte afbeelding van het bericht.

Automatiseringsregel-editor
Automatiseringsregel-editor

Gebruiksgemak

Al deze aanvullende gebruiksscenario's kunnen rechtstreeks in de wp-admin worden gerealiseerd door de GraphQL-query via een gebruikersinterface aan te bieden, zonder dat je PHP-code hoeft te implementeren.

Abonneer je op onze nieuwsbrief

Blijf op de hoogte van alle updates over Gato GraphQL.