GraphQL haalt 60% minder data op dan REST bij een productdetailpagina. Maar REST is sneller bij eenvoudige operaties. De keuze hangt af van je use case, niet van hype.
Magento 2 REST API vs GraphQL — performance vergeleken
GraphQL is niet automatisch beter dan REST. En REST is niet automatisch langzamer. De keuze hangt af van je use case, je team en je architectuur. Wij hebben beide APIs gemeten op dezelfde Magento 2.4 installatie. Dit zijn de resultaten.
Wat je leert in dit artikel
- Hoe REST en GraphQL in Magento 2 technisch verschillen
- Benchmarks: response times en payload sizes
- Caching: waar REST wint van GraphQL
- Wanneer je REST kiest en wanneer GraphQL
- Praktische code-voorbeelden voor beide APIs
Technische achtergrond
Magento 2 heeft beide APIs ingebouwd:
- REST API — beschikbaar via
/rest/V1/, volgt RESTful conventies, response in JSON of XML - GraphQL — beschikbaar via
/graphql, één endpoint, client bepaalt welke velden worden teruggegeven
De fundamentele architectuurregel verschilt: REST geeft een vaste response-structuur terug, GraphQL geeft precies terug wat de client vraagt.
Benchmark-setup
Server: 8 vCPU, 32GB RAM, NVMe SSD, Ubuntu 22.04 Magento versie: 2.4.6-p3 met Elasticsearch 8 Catalogus: 15.000 producten, 45 categorieën Cache: Redis voor object cache, Varnish voor full-page cache (uitgeschakeld voor deze tests) Meetmethode: 100 requests per test, mediaan response time, Apache BenchBenchmark resultaten
Productdetailpagina ophalen
Een productdetailpagina vereist: naam, prijs, SKU, beschrijving, afbeeldingen, attributen, stock-status.
REST API:GET /rest/V1/products/SKU-12345
Magento geeft hier de volledige product-resource terug — inclusief alle velden die je niet nodig hebt.
GraphQL:{
products(filter: { sku: { eq: "SKU-12345" } }) {
items {
name
sku
price_range {
minimum_price {
regular_price { value currency }
}
}
description { html }
media_gallery { url label }
stock_status
}
}
}
| Meting | REST API | GraphQL |
|---|---|---|
| Mediaan response time | 142ms | 118ms |
| Payload grootte | 24.8 KB | 9.2 KB |
| Payload reductie | — | 63% kleiner |
| P95 response time | 198ms | 165ms |
GraphQL is hier 17% sneller en stuurt 63% minder data. Het verschil in snelheid is voor een groot deel te verklaren door de kleinere payload die geserialiseerd en verstuurd moet worden.
Categoriepagina met productlijst (20 producten)
REST API:GET /rest/V1/products?searchCriteria[filter_groups][0][filters][0][field]=category_id&searchCriteria[filter_groups][0][filters][0][value]=15&searchCriteria[pageSize]=20
{
categoryList(filters: { ids: { eq: "15" } }) {
products(pageSize: 20, currentPage: 1) {
items {
name
sku
url_key
price_range {
minimum_price {
regular_price { value }
}
}
small_image { url label }
stock_status
}
}
}
}
| Meting | REST API | GraphQL |
|---|---|---|
| Mediaan response time | 389ms | 298ms |
| Payload grootte | 187 KB | 48 KB |
| Payload reductie | — | 74% kleiner |
| P95 response time | 512ms | 387ms |
Bij een productlijst is het verschil groter: 23% sneller met GraphQL, 74% minder data.
Simpele operaties: winkelwagen toevoegen
REST API:POST /rest/V1/carts/mine/items
{
"cartItem": {
"quote_id": "abc123",
"sku": "SKU-001",
"qty": 1
}
}
mutation {
addProductsToCart(
cartId: "abc123"
cartItems: [{ quantity: 1, sku: "SKU-001" }]
) {
cart {
items { quantity product { name } }
prices { grand_total { value } }
}
}
}
| Meting | REST API | GraphQL |
|---|---|---|
| Mediaan response time | 87ms | 94ms |
| Payload grootte | 1.2 KB | 0.8 KB |
Bij simpele schrijfoperaties is REST iets sneller. GraphQL heeft overhead door query-parsing.
Caching: het grote verschil
Hier wint REST in veel gevallen. REST requests zijn cacheable via standaard HTTP-caching. Varnish, Fastly, Cloudflare — ze werken allemaal natively met REST GET-requests.
GraphQL gebruikt standaard POST-requests. POST-requests zijn per HTTP-specificatie niet cacheable. Varnish slaat ze niet op.
Workarounds voor GraphQL-caching:- Persisted queries — Sla de query op aan de serverzijde en stuur alleen een hash mee. Maakt GET-requests mogelijk.
- Magento's ingebouwde GraphQL-cache — Magento cachet GraphQL-responses in Redis, maar dit is alleen effectief voor identieke queries.
- Edge caching op CDN-niveau — Cloudflare en Fastly bieden GraphQL-specific caching, maar dat vereist configuratie.
# Persisted query voorbeeld
GET /graphql?hash=abc123def456
# In plaats van
POST /graphql
{ "query": "{ products(filter:...) { items { name sku } } }" }
Met persisted queries en een goed ingesteld CDN haal je dezelfde cache-hit ratios als REST. Maar het is meer werk om op te zetten.
Wanneer REST gebruiken
REST is de betere keuze als:
- Je server-to-server integraties bouwt — ERP-koppelingen, PIM-integraties, ordermanagementsystemen. Deze systemen halen specifieke resources op, niet variabele datavelden.
- Je caching wilt maximaliseren — REST + Varnish is de eenvoudigste route naar maximale cache-performance.
- Je team REST beter kent — Een bekende API is productiever dan een snellere API die niemand kent.
- Je schrijfoperaties doet — REST mutaties zijn eenvoudiger te debuggen en te loggen.
# Praktisch voorbeeld: order ophalen via REST (server-to-server)
curl -X GET \
'https://winkel.nl/rest/V1/orders/12345' \
-H 'Authorization: Bearer {admin_token}'
Wanneer GraphQL gebruiken
GraphQL is de betere keuze als:
- Je een headless frontend bouwt — React, Next.js, Vue — frontends die per pagina exact de benodigde data ophalen. GraphQL is hiervoor gebouwd.
- Je Hyva Theme gebruikt — Hyva is specifiek gebouwd op Magento's GraphQL API.
- Je mobiele app bouwt — Minder data = lagere mobiele datakostenboekhouding en snellere laadtijden op trage verbindingen.
- Je backend for frontend (BFF) patroon gebruikt — Een BFF-laag die data aggregeert voor een specifieke client past perfect bij GraphQL.
# Praktisch voorbeeld: mini-cart data voor React component
query GetMiniCart($cartId: String!) {
cart(cart_id: $cartId) {
items {
id
quantity
product {
name
thumbnail { url }
price_range {
minimum_price {
regular_price { value currency }
}
}
}
}
prices {
grand_total { value currency }
subtotal_excluding_tax { value }
}
total_quantity
}
}
GraphQL performance optimaliseren
Als je voor GraphQL kiest, zijn er twee quick wins:
1. Query complexity limits instellenMagento heeft ingebouwde bescherming tegen te complexe queries:
// In app/etc/env.php
'graphql' => [
'query_complexity_limit' => 300,
'query_depth_limit' => 20,
],
GraphQL heeft een inherent N+1 probleem: voor elke item in een lijst wordt een aparte query gedaan. Magento lost dit op met DataLoaders, maar controleer of jouw custom resolvers dit ook doen.
// Fout: N+1 queries
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
// Dit genereert een query per product
return $this->productRepository->getById($value['product_id']);
}
// Correct: gebruik de BatchedDataProvider
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
return $this->batchedProductLoader->load($value['product_id']);
}
Samenvatting: de beslisboom
| Situatie | Aanbeveling |
|---|---|
| Headless frontend (React/Next.js) | GraphQL |
| Hyva Theme | GraphQL |
| ERP/PIM integratie | REST |
| Mobiele app | GraphQL |
| Server-to-server imports | REST |
| Maximale Varnish-caching | REST |
| B2B portal met complexe data | GraphQL |
| Simpele CRUD-operaties | REST |
Conclusie
GraphQL wint op payload-grootte en flexibility. REST wint op eenvoud en native HTTP-caching. De beste keuze hangt af van je architectuur, niet van hype.
Voor headless en Hyva: GraphQL. Voor integraties en eenvoudige use cases: REST. In een complexe architectuur kun je beide naast elkaar gebruiken — REST voor backend-integraties, GraphQL voor de frontend.
Meer weten over de Magento 2 GraphQL API en hoe je die optimaal inzet? Lees onze GraphQL-gids. Bekijk ook onze Magento 2 diensten voor een volledig overzicht van wat wij doen.
Wil je weten welke API-aanpak het beste past bij jouw Magento-project? Neem contact op voor een vrijblijvend gesprek.

Geschreven door Ruthger Idema
15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.
Meer over ons team →