Gato GraphQL vs WPGraphQL
Vergelijking tussen Gato GraphQL en 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
| Functie | Gato GraphQL | WPGraphQL |
|---|---|---|
| N+1 Query Probleem | Geen probleem dankzij het architectuurontwerp | Kan een probleem zijn als het niet wordt afgehandeld; de ontwikkelaar moet hiervan bewust zijn |
| Beveiliging: Endpoint uitschakelen | Kan het enkele endpoint volledig uitschakelen met persisted queries (PRO) | Niet aangeboden |
| Toegangscontrole | Veld-voor-veld validatie, met rollen/rechten/IP, via UI (PRO) | Niet op veldniveau, minder granulair |
| Cache-controle | max-age automatisch berekend voor queries (PRO) | Geen automatische cache-controle |
| Aangepaste endpoints | Meerdere, wachtwoordbeveiligde/aanpasbare endpoints; endpointhierarchie ondersteund (PRO) | Enkel endpoint, beperkte aanpassing |
| Bulk-updates & Zoeken/Vervangen | Bulk verwijderen, taggen, vervangen (met regex), via GraphQL (PRO) | Niet beschikbaar |
| Aangepaste/experimentele GraphQL-functies | Geneste mutaties, schema namespacing, oneOf input object | Voornamelijk standaard GraphQL-specificatie |
| Multiple Query Execution (composability) | Meerdere queries in één document, staat delen met @export | Batch queries (meerdere per request), maar kunnen geen staat delen |
| Interne/privé-endpoints | Privé-endpoint voor backend/PHP-only, niet zichtbaar voor gebruikers (PRO) | Niet beschikbaar |
| Uitgebreide datamutatie | Gegevens ophalen, wijzigen en opslaan in één document (PRO) | Niet ondersteund |
| Content synchronisatie & distributie | Importeren/exporteren via GraphQL, RSS, CSV, REST API (PRO) | Niet beschikbaar |
| Webservice-integratie | Uitgaande/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 queries | Meer basale beheer-UI |
| Batching/composability | Velden/directives combineren, herbruikbare resolver-logica (PRO) | Niet ondersteund |
| Multiple Query Execution | Ondersteund, met gedeelde staat en afhankelijkheden | Ondersteund, geen staat delen |
| Standaard headless/statisch gebruik | Beide zijn even capabel | Beide 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.

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).

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).

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).

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.

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.

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.
