Shopware bietet zwei REST-Schnittstellen, die Store-API und die Admin-API, aber keine offizielle GraphQL-API. Wir zeigen Authentifizierung und Beispielanfragen für beide und ordnen ein, was GraphQL-Projekte wie SwagGraphQL leisten.
REST (Representational State Transfer) ist ein Architekturstil für vernetzte Anwendungen. REST-APIs werden über HTTP angesprochen, die üblichen Operationen laufen über die Methoden GET (lesen), POST (anlegen), PATCH bzw. PUT (ändern) und DELETE (löschen). Shopware 6 stellt zwei REST-Schnittstellen bereit:
Beide Schnittstellen tauschen Daten im JSON-Format aus und melden das Ergebnis über HTTP-Statuscodes zurück, etwa 200 für Erfolg oder 401 für fehlende Berechtigung. Die folgenden Abschnitte zeigen Authentifizierung und Beispielanfragen. Grundlagen zur Plattform finden Sie auf unserer Seite zur Shopware-Entwicklung.
Die Store-API ist der Zugang zur Storefront von Shopware. So autorisieren Sie sich und senden erste Anfragen.
Die Store-API verlangt einen sw-access-key, der an einen Verkaufskanal gebunden ist:
https://ihr-shop.de/admin an.Shopware liefert eine Swagger-Oberfläche zum Testen der Store-API mit:
https://ihr-shop.de/store-api/_info/swagger.html auf.sw-access-key ein und bestätigen Sie.Danach können Sie alle Endpunkte direkt im Browser ausprobieren.
Eine Produktliste liefert eine POST-Anfrage an /store-api/product. Die Store-API nimmt Suchkriterien wie Limit, Filter und Sortierung im Body entgegen. Mit cURL:
curl -X POST https://ihr-shop.de/store-api/product \
-H "sw-access-key: IHR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{"limit": 10}'
Die Antwort ist JSON mit einem Array elements, das Produkte mit Namen, Preisen und IDs enthält:
{
"elements": [
{
"id": "0190d2e8f2b47c6f9d1a0c5e8b3f1a2b",
"name": "Beispielprodukt",
"calculatedPrice": { "totalPrice": 19.99 },
"stock": 100
}
],
"total": 1
}
Headless-Shops laufen vollständig über diese Schnittstellen. Die Wahl zwischen REST und GraphQL ist deshalb eine Architekturentscheidung: REST ist ausgereift und wird von den offiziellen Shopware-Werkzeugen unterstützt, GraphQL bietet flexibleres Laden von Daten für komplexe Frontends, hat in Shopware aber keinen offiziellen Status (dazu unten mehr).
Die Admin-API ist für Backend-Integrationen gedacht und gibt Zugriff auf die Stammdaten von Shopware. Sie nutzt OAuth 2.0.
Mit den Zugangsdaten der Integration fordern Sie per POST /api/oauth/token ein Token an:
curl -X POST https://ihr-shop.de/api/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "client_credentials",
"client_id": "IHRE_ZUGRIFFSSCHLUESSEL_ID",
"client_secret": "IHR_SICHERHEITSSCHLUESSEL"
}'
Die Antwort enthält ein Token, das zehn Minuten gültig ist:
{
"token_type": "Bearer",
"expires_in": 600,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
}
Mit dem Token rufen Sie die Admin-API auf. Eine Produktliste liefert GET /api/product:
curl -X GET https://ihr-shop.de/api/product \
-H "Authorization: Bearer IHR_ACCESS_TOKEN" \
-H "Content-Type: application/json"
Den Bestand ändern Sie mit einer PATCH-Anfrage an /api/product/{produkt-id}:
curl -X PATCH https://ihr-shop.de/api/product/0190d2e8f2b47c6f9d1a0c5e8b3f1a2b \
-H "Authorization: Bearer IHR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "stock": 150 }'
Für Massenänderungen bietet die Admin-API den Sync-Endpunkt POST /api/_action/sync, der viele Datensätze in einem Aufruf schreibt. Und wenn Sie über Änderungen informiert werden möchten, statt sie abzufragen, lesen Sie unseren Beitrag zu Webhooks in Shopware 6.
GraphQL ist eine Abfragesprache, bei der der Client genau angibt, welche Daten er braucht. Das vermeidet Over-Fetching und kann effizienter sein als REST. Statt vieler Endpunkte gibt es einen einzigen, meist /graphql. Shopware bietet jedoch keine offizielle GraphQL-API. GraphQL lässt sich nur über Community-Projekte wie SwagGraphQL nachrüsten.
SwagGraphQL ist ein Proof of Concept von shopwareLabs, der eine GraphQL-API über die Kern-API von Shopware legt. Er basiert auf der Bibliothek webonyx/graphql-php und ist als Plugin in Shopware 6 eingebunden. Das Projekt wird nicht mehr gepflegt, wurde für frühe Versionen von Shopware 6 gebaut und sollte ohne umfangreiche Anpassungen nicht produktiv eingesetzt werden.
Zum Ausprobieren in einer Entwicklungsumgebung:
# Repository in den Plugin-Ordner klonen
git clone https://github.com/shopwareLabs/SwagGraphQL.git custom/plugins/SwagGraphQL
# Abhängigkeiten des Plugins installieren
cd custom/plugins/SwagGraphQL && composer install && cd -
# Plugin registrieren und aktivieren
bin/console plugin:refresh
bin/console plugin:install --activate SwagGraphQL
bin/console cache:clear
Nach der Installation ist der Endpunkt unter https://ihr-shop.de/graphql/query erreichbar und lässt sich mit Werkzeugen wie GraphiQL ansprechen. Eine Abfrage für Produkte sieht so aus:
query {
products {
id
name
price
}
}
Wer GraphQL im Frontend braucht, baut in der Praxis eine eigene Schicht: ein BFF (Backend for Frontend) in Node.js oder PHP, das GraphQL nach außen anbietet und intern Store-API und Admin-API aufruft. Middleware-Plattformen wie Alumio verbinden Shopware mit GraphQL-basierten Systemen, ersetzen aber keine native GraphQL-API im Shopware-Kern. Für einfache Automatisierungen zwischen Systemen reicht oft auch n8n.
sw-access-key fehlt, ist falsch oder gehört zu einem anderen Verkaufskanal./store-api/product.includes und associations), Ergebnisse paginieren, Antworten zwischenspeichern.Mit Store-API und Admin-API deckt Shopware die Anbindung eigener Frontends und externer Systeme vollständig über REST ab. Eine offizielle GraphQL-API gibt es nicht, Community-Projekte wie SwagGraphQL eignen sich nur für Experimente. Wer GraphQL im Frontend braucht, setzt eine eigene Schicht vor die REST-Schnittstellen. Richtig konfiguriert und nach den genannten Regeln betrieben, sind die Shopware-APIs die Basis für Headless-Frontends, CRM-Abgleiche und Automatisierungen. Wenn Sie dafür ein Plugin oder eine App brauchen, unterstützen wir Sie mit Shopware-Plugin-Entwicklung; einen ersten Überblick über Ihren Shop liefert unsere Shop-Analyse.