Gato GraphQL vs WP REST API
Vergelijking tussen Gato GraphQL en de WP REST API


De verschillen tussen REST- en GraphQL-API's zijn over het algemeen ook van toepassing bij het vergelijken van de WP REST API met Gato GraphQL.
Met GraphQL kun je een op maat gemaakte GraphQL-query uitvoeren tegen een endpoint, waarbij je precies aangeeft welke data je nodig hebt en die data in één enkel verzoek ophaalt.
De volgende GraphQL-query haalt bijvoorbeeld de benodigde data op voor een specifiek bericht, inclusief data uit gerelateerde entiteiten (auteur, categorieën en tags), allemaal binnen één verzoek:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}Om dezelfde data op te halen met REST moet je mogelijk eerst een verzoek uitvoeren om de berichtdata op te halen, en daarna voor elke relatie (auteur, categorieën en tags) een afzonderlijk verzoek sturen.
Deze architecturele verschillen tussen REST en GraphQL zijn uitgebreid elders besproken, dus herhalen we ze hier verder niet.
Hieronder maken we een meer specifieke vergelijking tussen Gato GraphQL + alle extensies en de WP REST API.
Overzichtstabel
| Functie | Gato GraphQL | WP REST API |
|---|---|---|
| Data ophalen | Voert op maat gemaakte GraphQL-queries uit tegen een endpoint en haalt specifieke data op in één enkel verzoek. | Vereist meerdere verzoeken naar verschillende endpoints om gerelateerde data op te halen (bijv. berichtdata, auteurdata, categorieën en tags). |
| Endpoints | Ondersteunt Persisted Queries, dat zijn endpoints met vooraf gedefinieerde data die worden aangemaakt via de GraphQL-taal via een gebruikersinterface in de wp-admin, zonder dat er code hoeft te worden gedeployed. | Stelt data beschikbaar via REST-endpoints, elk met een eigen URL en vooraf gedefinieerde data, aangemaakt via PHP-code en gedeployed in een thema of plugin. |
| Toegangsbeheer | Biedt flexibiliteit met toegangsbeheer op veldniveau op basis van regels (bijv. gebruikersrollen, bevoegdheden, IP-bereik). | Beperkt data op basis van de parameter context (bijv. view voor niet-ingelogde gebruikers, edit voor ingelogde gebruikers met de juiste rechten). |
| Bulkbewerkingen | Ondersteunt Multiple Query Execution, waarbij één GraphQL-document meerdere operaties kan uitvoeren die onderling status kunnen delen via de @export-directive, een verbetering ten opzichte van batch requests. | Staat batch requests toe, waarbij meerdere verzoeken intern worden afgehandeld binnen één HTTP-verzoek. |
| Sitebeheer | Kan data ophalen, aanpassen en terugopslaan binnen één GraphQL-document via gebruikersinterfaces, wat automatisering en beheer van WordPress-sites mogelijk maakt. Kan taken uitvoeren van meerdere plugins, zoals dupliceren, automatiseren, back-ups maken, zoeken/vervangen, webhooks en vertalen. Het is een API én veel meer. | Primair een API voor het benaderen en bewerken van WordPress-data. |
| Algemeenheid | Een generiek hulpmiddel om WordPress-sites te beheren, geschikt voor datamutatie en integratie met externe diensten via GraphQL-queries. | Gericht op het bieden van een API; vereist extra plugins of aangepaste code om vergelijkbare functionaliteit te bereiken. |
Samenvatting van de belangrijkste punten:
- Data ophalen: Gato GraphQL gebruikt op maat gemaakte queries, terwijl de WP REST API meerdere endpoint-verzoeken gebruikt.
- Endpoints: Gato GraphQL gebruikt persisted queries aangemaakt via de UI, terwijl de WP REST API PHP-gecodeerde REST-endpoints gebruikt.
- Toegangsbeheer: Gato GraphQL biedt beheer op veldniveau, terwijl de WP REST API de context-parameter gebruikt.
- Bulkbewerkingen: Gato GraphQL gebruikt Multiple Query Execution en de WP REST API gebruikt batch requests.
- Sitebeheer: Gato GraphQL is een alomvattend hulpmiddel, terwijl de WP REST API primair een API is.
Toegang tot vooraf gedefinieerde data
Met de WP REST API stel je data beschikbaar via REST-endpoints. Elk endpoint heeft zijn eigen URL en de data is vooraf gedefinieerd (voor de bijbehorende resources, zoals berichten of gebruikers).
Net als REST-endpoints ondersteunt Gato GraphQL Persisted Queries, die ook endpoints zijn met vooraf gedefinieerde data. Een persisted query aanroepen via GET voert de opgeslagen GraphQL-query uit en produceert de verwachte JSON-respons:

Het verschil is dat REST API-endpoints worden aangemaakt via PHP-code en moeten worden gedeployed in een thema of plugin, terwijl persisted queries van Gato GraphQL worden aangemaakt met de GraphQL-taal en worden gepubliceerd via een gebruikersinterface (aangedreven door de WordPress-editor) in de wp-admin, zonder dat er code hoeft te worden gedeployed.

Dezelfde cachingmechanismen kunnen worden toegepast op REST-endpoints en GraphQL-persisted queries. Omdat de persisted query beschikbaar is via een eigen endpoint, kan de respons worden gecached via standaard HTTP-caching (PRO).
Toegangsbeheer
Het beperken van data in de WP REST API hangt af van de parameter context. Het meegeven van ?context=view levert data op voor niet-ingelogde gebruikers, en ?context=edit bevat aanvullende data voor ingelogde gebruikers (met de juiste rechten), zoals het veld content.raw van een bericht.
Gato GraphQL biedt veel meer flexibiliteit: elk afzonderlijk veld is wel of niet toegankelijk op basis van Toegangsbeheer-regels. Je kunt instellen dat alleen ingelogde gebruikers, gebruikers met een bepaalde rol of bevoegdheid, of bezoekers uit een bepaald IP-bereik toegang hebben tot een specifiek veld (PRO).

Bulkbewerkingen
De WP REST API maakt het mogelijk batch requests uit te voeren, waarbij meerdere verzoeken intern worden afgehandeld binnen één HTTP-verzoek.
Gato GraphQL biedt Multiple Query Execution, waarbij één GraphQL-document meerdere operaties kan uitvoeren.
Multiple Query Execution is een verbetering ten opzichte van batch requests, omdat de operaties onderling status kunnen delen via de @export-directive.
Om bijvoorbeeld een bericht te dupliceren, haalt een query-operatie de berichtdata op en geeft die door 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
}
}De WordPress-site beheren
Met Gato GraphQL kun je data ophalen uit de database, aanpassen waar nodig, en terugopslaan — allemaal binnen één GraphQL-document.
Dit wordt mogelijk gemaakt via gebruikersinterfaces waarmee je de GraphQL-queries kunt samenstellen en publiceren, de endpoints naar behoefte kunt configureren, en de uitvoering van een query kunt automatiseren wanneer er een bepaalde gebeurtenis plaatsvindt.
Dit alles betekent dat Gato GraphQL een generiek hulpmiddel is om je WordPress-sites te beheren, en die gebruiksscenario's afhandelt waarbij data (afkomstig van de WordPress-site of aangeleverd door externe diensten) gemuteerd moet worden, iets wat bereikt kan worden door een GraphQL-query uit te voeren.
Let op hoe Gato GraphQL de functionaliteit van meerdere plugins kan leveren:
- Het is geen duplicatieplugin, maar je kunt er wel berichten dupliceren mee.
- Het is geen automatiseringsplugin, maar je kunt er wel je taken mee automatiseren, zonder enige beperking.
- Het is geen back-upplugin, maar je kunt er wel berichten mee importeren en exporteren.
- Het is geen zoek-en-vervangplugin, maar je kunt er wel je berichten in bulk aanpassen mee.
- Het is geen webhookplugin of HTTP-client, maar je kunt er zowel verzoeken mee sturen naar elk API als inkomende verzoeken van elke dienst ontvangen en verwerken.
- Het is geen vertaalplugin, maar je kunt er wel alle content mee vertalen.
De WP REST API is precies dat: een API.
Gato GraphQL is ook een API, maar ook nog veel meer.
