Wir haben uns entschieden, zu diesem Thema einen neuen Blogbeitrag zu schreiben, um Menschen, die aktuell Probleme mit der Performance ihrer ERP-Anbindung über die API haben, zu unterstützen. Generell sei vorab gesagt: Die API ist grundsätzlich nicht langsam, sondern kann mit der richtigen Konfiguration sehr leistungsfähig werden.
Aber beginnen wir am Anfang, ohne zu technisch zu werden.
Was ist der Vorteil, Daten über die API von Shopware einzuspielen und auszulesen? Dank des API-First-Ansatzes in Shopware haben wir die Möglichkeit, Informationen wie Kundendaten, Stammdaten, Produktdaten oder Bestellungen in Shopware zu transferieren und anzulegen, zu aktualisieren oder zu löschen.
Das gleiche gilt für das Löschen und Erweitern. All dies können wir mit nur einer Anbindung und entsprechenden Requests über die API abwickeln. Damit Tools wie ein ERP und PIM beispielsweise möglichst sauber mit einem Shopsystem kommunizieren können, setzt man heutzutage auf genau diese API-Schnittstellen. Denn anders als bei einer CSV oder einer direkten Datenbank-Injektion werden hier Daten nicht hart geschrieben, sondern reagieren auf einen fehlerhaften Eintrag oder gegebenenfalls fehlende Pflichtfelder, Limit-Überschreitungen einer Zeichenkette (z. B. zu lange Produktnummer/SKU) oder sonstige Fehler. So ist es möglich, eine Fehlermeldung im Shop auszulesen und parallel dem ERP oder PIM diesen Fehler zu kommunizieren.
So wird der Shop vor falschen Eingaben geschützt und Fehlfunktionen vermieden. Warum dauert dieser API-Prozess in Shopware nun aber so lange bei dem einen oder anderen ERP oder der Middleware oder PIM? Je nach Komplexität der Daten durchläuft die API mehrere Schritte. Das ERP baut z. B. eine Verbindung auf, prüft, ob ein Artikel schon vorhanden ist. Der Shop antwortet dem ERP in unserem Beispiel mit „Nein“, nun schickt der Shop den Befehl, das Produkt im Shop anzulegen. Der Shop antwortet, erzeugt einen „Create-Befehl“ und erzeugt den Artikel, sendet die UUID (eine Art zufällig generierte Nummer, die den Artikel in der Datenbank identifiziert) zum ERP, und wenn wir Glück haben, speichert das ERP diese für sich intern ab.
Nun rennt das ERP wieder los und will dem Produkt beispielsweise den Hersteller zuweisen.
Daher prüft das ERP, ob der Hersteller bereits existiert, und lässt sich auch diese UUID berichten. Nun kann das ERP dem Shop die Zuweisung des Herstellers mit der UUID für das Produkt zuweisen. Dieses Pingpong-Spiel macht der Shop jetzt für eine Vielzahl der Felder. Insbesondere Eigenschaftsgruppen und Eigenschaften, Hersteller oder Bilder neigen in diesem Prozess zu einer Verlangsamung.
Wie aber kann dieser Prozess nun beim Erstellen eines Produkts beschleunigt werden?
Ganz einfach gesagt, muss das ERP lernen, die UUIDs im ersten Schritt unserer Optimierung zwischenzuspeichern.
Dann würde nämlich in unserem zuvor gelieferten Beispiel der Artikel angelegt werden und im zweiten Update bereits die Zuweisung von Hersteller und Eigenschaften direkt geschrieben und nicht mehr angefragt.
Klingt banal, aber wenn wir das hochrechnen, können wir so beim Optimieren von Datenflüssen die Zeit von z. B. 15 Sekunden pro Anlage auf unter eine Sekunde reduzieren – bedeutet mal eben von ca. 4 Produkten pro Minute auf ca. 60. Bei größeren Datenmengen empfiehlt es sich dann, ein Delta zu erzeugen und nur Daten zu aktualisieren, die auch wirklich ein Update brauchen, sofern euer ERP dies nicht unterscheiden kann.
Dazu gibt es z. B. Lösungen wie Yedi oder Lobster, mit denen wir in der Vergangenheit Artikelanlagen von mehr als 900.000 Produkten pro Tag erzeugt haben. Wir gehen davon aus, dass je nach Art und Weise auch eine Leistung von mehr als 1,5 Mio. Voll-Updates erzeugt werden kann.
Alternativ kann man auch für die wichtigsten Prozesse einen eigenen Push anlegen, mit dem man nur Lagerbestand und Preis aktualisiert und entsprechend nachts dann neue Produkte hinzufügt. Ist dies nicht möglich, gibt es gegebenenfalls die Möglichkeit, ein Teil-Update auch als Plugin über ein automatisches Verarbeiten einer CSV zu realisieren.
Tipp: Wir empfehlen hier nicht den Weg über die direkte Datenbank-Injektion zu wählen
- 1. hast Du keine Kontrolle über fehlerhafte Einträge,
- 2. kannst Du damit den Shop lahmlegen,
- 3. muss das Produkt dann noch durch den Indexer, um im Frontend und in der Suche aufzutauchen. Solltest Du technische Unterstützung bei einer Verbesserung der Performance Deiner ERP-Anbindung zu Shopware 6 benötigen, beraten wir Dich gern!