APIs & Integrationen

Zwanzig Storefront-Funktionen gegen die Store API

Dreimal falsch gemessen, bevor die Methode taugte: Routennamen, Importe, Konstruktoren. Erst der zwanzigfache echte Aufruf gab eine Antwort — und sie ist kürzer als erwartet.

Pixup MediaVeröffentlicht am 10 Min. Lesezeit

Ergebnis

20 von 20 erreichbar

Alle zwanzig geprüften Handelsfunktionen antworten über die Store API. Was fehlt, ist keine Handelsfunktion, sondern die Maschinerie einer HTML-Storefront. Davon ist für ein Headless-Frontend genau eines relevant: das Captcha, für das es null Store-API-Routen gibt.

Diese Frage hat uns dreimal eine falsche Antwort geliefert, bevor die Methode taugte. Das gehört an den Anfang, weil die falschen Antworten alle plausibel aussahen.

Drei Methoden, die nicht funktioniert haben

Erstens: Routennamen vergleichen. Man nimmt die Liste der Storefront-Routen, die Liste der Store-API-Routen, sucht nach Entsprechungen. Ergebnis: eine Zahl, die nach Erkenntnis aussieht und keine ist. frontend.detail.page und /store-api/product/{id} heißen verschieden und tun dasselbe.

Zweitens: Quelltext nach Importen durchsuchen. Man prüft, ob ein Storefront-Controller eine Store-API-Routenklasse importiert. Ergebnis: 24 angebliche Lücken — darunter sieben Routen aus dem Theme-Bereich, die gar keine Storefront-Funktionen sind, und frontend.navigation.page, für das /store-api/category/{navigationId} nachweislich existiert. Ursache: Controller importieren Interfaces, keine Implementierungen.

Drittens: Konstruktorparameter rekursiv verfolgen. Technisch sauberer, und das Ergebnis war versionsabhängig instabil — 6 Lücken in 6.6, 15 in 6.7, mit frontend.detail.page als angeblicher Lücke, obwohl /store-api/product/{id} existiert.

Drei Methoden, drei Zahlen, jede falsch. Der Fehler war derselbe: Sie haben die Verdrahtung gemessen, nicht die Fähigkeit.

Die Methode, die trägt

Zwanzig Funktionen vorab benennen. Jede einzeln aufrufen. Aufschreiben, was zurückkommt.

Das ist unspektakulär und hat einen Vorteil, den keine Code-Analyse hat: Es misst, was ein Frontend-Entwickler tatsächlich tun würde.

Das Ergebnis

FunktionEndpunktHTTP
CMS-Seite / KategoriePOST /store-api/category/{id}200
Kategorie-ListingPOST /store-api/product-listing/{id}200
ProduktdetailPOST /store-api/product/{id}200
ProduktsuchePOST /store-api/search200
SuchvorschlagPOST /store-api/search-suggest200
NavigationPOST /store-api/navigation/{a}/{r}200
Warenkorb lesenGET /store-api/checkout/cart200
Warenkorb füllenPOST /store-api/checkout/cart/line-item200
VersandartenPOST /store-api/shipping-method200
ZahlartenPOST /store-api/payment-method200
LänderPOST /store-api/country200
AnredenPOST /store-api/salutation200
SprachenPOST /store-api/language200
WährungenPOST /store-api/currency200
Kontext lesenGET /store-api/context200
RegistrierungPOST /store-api/account/register400
AnmeldungPOST /store-api/account/login401
NewsletterPOST /store-api/newsletter/subscribe400
KontaktformularPOST /store-api/contact-form400
SitemapGET /store-api/sitemap200

20 von 20. Die vier Antworten mit 400 und 401 sind Validierungsfehler auf absichtlich leere Rümpfe — der Endpunkt existiert und prüft. Ein fehlender Endpunkt hätte 404 geliefert.

Und jetzt die Gegenrichtung

Eine Stichprobe, die überall 200 liefert, beweist nicht, dass nichts fehlt. Also die umgekehrte Suche: Welche frontend.*-Routen haben keine Entsprechung?

Bereichfrontend-RoutenStore-API
Captchabasic-captcha.load, basic-captcha.validate0 Routen
Cookiecookie.offcanvas, .permission, .consent.offcanvas, .groups/store-api/cookie-groups
App-Skriptescript_endpoint/store-api/script/{hook}
Wartungmaintenance.page, .singlepage0 — irrelevant
robots.txtrobots.txt0 — irrelevant
Passwortwechselwell-known.change-password0 — irrelevant

Die letzten drei sind HTML-Maschinerie. Ein Headless-Frontend hat seine eigene Wartungsseite, seine eigene robots.txt und seinen eigenen .well-known-Pfad. Dass die Store API sie nicht liefert, ist kein Mangel.

Cookie-Gruppen gibt es — nur das Rendern der Auswahlbox nicht, und das ist Aufgabe des Frontends. App-Skripte gibt es ebenfalls.

Bleibt genau eines: das Captcha.

Die eine echte Lücke

Shopware bringt eine einfache Captcha-Prüfung für Formulare mit — Registrierung, Kontaktformular, Newsletter. Sie hat zwei Storefront-Routen und keine Entsprechung in der Store API.

Für ein Headless-Frontend heißt das: Der Bot-Schutz der Formularstrecken ist nicht mitgeliefert, sondern selbst zu bauen — mit einem eigenen Dienst, einer eigenen Prüfung und einer eigenen Entscheidung darüber, was bei Verdacht passiert.

Das ist keine große Lücke. Aber es ist die einzige, die tatsächlich Arbeit bedeutet, und sie steht in keiner Vergleichstabelle.

Was noch zählt, aber keine Lücke ist

Die Store API begrenzt eine Anfrage auf 100 Datensätze. Ein Aufruf mit limit: 101 wird mit FRAMEWORK__QUERY_LIMIT_EXCEEDED abgelehnt. Die Admin-API erlaubt an derselben Stelle 500.

Das ist keine fehlende Fähigkeit, aber eine Architekturentscheidung mit Folgen: Ein Katalogabzug über 10.000 Produkte braucht über die Store API 100 Anfragen, über die Admin-API 20. Wer nachts synchronisiert, nimmt die Admin-API — und zwar nicht wegen der Funktionen, sondern wegen der Seitenzahl.

Was das für die Entscheidung bedeutet

FrageAntwort
Kann ein Headless-Frontend alles, was die Storefront kann?Für die zwanzig geprüften Handelsfunktionen: ja
Was muss selbst gebaut werden?Bot-Schutz der Formulare. Dazu alles, was HTML ist — was ohnehin der Zweck eines eigenen Frontends ist
Wo ist der eigentliche Aufwand?Nicht in fehlenden Endpunkten, sondern im Frontend selbst: Zustand, Routing, Rendering, SEO
Wann trotzdem Admin-API?Für Massenabzüge. 500 statt 100 je Anfrage

Die verbreitete Sorge, die Store API könne zu wenig, hat sich in dieser Messung nicht bestätigt. Die Arbeit liegt woanders — nur nicht dort, wo die Vergleichstabellen hinzeigen.

Grenzen dieser Messung

Zwanzig Funktionen sind eine Stichprobe, keine Vollerhebung. Geprüft ist, dass ein Endpunkt antwortet, nicht, dass er feldgleich dasselbe liefert wie die Storefront-Seite — ein Feldvergleich je Endpunkt wäre eine eigene Untersuchung.

Nicht geprüft wurde der Bestellabschluss. Warenkorb lesen und füllen sind in der Stichprobe, der Weg von dort bis zur bestätigten Bestellung ist es nicht.

Und die Installation trug neun Plugins. Eine Erweiterung kann eigene Store-API-Routen mitbringen — die Zahl 97 ist die dieser Installation, nicht die des blanken Kerns.

Technische UnterstützungApp- und Plugin-Entwicklung