Hallo, ich möchte für einen relativ komplexen Import die REST API per lokalem Zugriff verwenden. Sämltiche Importscripts befinden sich in einem Verzeichnis außerhalb des SW Documentroots (z.B. /data/import). Welche SW Dateien muss ich includieren um mit dem Beispiel unter [Ich kann den SW Beispiel Link “Rest API Tutorial - Lokaler Zugriff” leider nicht posten] weiter zu kommen? Beste Grüße Thomas
Die RestApi läuft über http! Sonst ist es keine RestApi! D.h. deine Importscripts arbeiten gegen die Schnittstelle auf http://localhost/ Du brauchst für deine Importscripts lediglich einen HTTP-Client für PHP zB Buzz (https://github.com/kriswallsmith/Buzz.git). Dann sendest du einfach die Requests und bekommst JSON zurück. Mit dem DocumentRoot hat das nichts zu tun. Besten Gruß Malte
Was hab ich dann bei: Die Shopware Rest API ist prädestiniert für den Datenaustausch mit externen Schnittstellen. Sollten Sie eine Schnittstelle / Projekt entwickeln das direkt in Shopware integriert werden soll, so können Sie den “Umweg” über den HTTP-Request umgehen und direkt auf die API zugreifen. falsch verstanden? Siehe wiki.shopware.de/Rest-API-Tutorial-Lokaler-Zugriff_detail_865_720.html
Okay… es geht wohl auch. Dann spricht man aber nicht mehr von einer RestApi… Wegen deinem Problem: Was spricht dagegen, die RestApi über HTTP lokal anzusprechen? Ist in deinem Fall auf jeden Fall einfacher, weil deine Scripts „standalone“ bleiben. Besten Gruß Malte
@RestApi - ja der Begriff ist in dem Fall falsch. Was spricht gegen den HTTP Request: Ich denke mal die Performance, bei ~ 40.000 Artikel, 6 Subshops wo jeder eigene Preise hat etc. Hier wäre ein nativerer Zugriff sicher von Vorteil. Ich bin aber auch am überlegen, ob ich nicht direkt in die DB schreiben soll. Beste Grüße Thomas
Den größten Overhead erzeugt das ORM Doctrine, wenn du über die API gehst. Die HTTP-Request machen den kleinsten Anteil aus. Wenn du wirklich Leistung brauchst, geht wohl nichts über native Queries mit INSERT Statements… Am besten immer 300-500 Datensätze erstellen, dann in einem INSERT Statement an die DB senden. Das brachte bei mir hier den größten Leistungszuwachs. Vorher hatte ich jeden Artikel einzeln eingefügt. Gruß Malte
Über ORM Overheads kann ich auch schon Lieder singen … Ich würde die HTTP Request aber auch nicht unterschätzen. Uns wurde halt von SW nahe gelegt doch die RestApi zu verwenden. Ich bin da bei unseren Datenmengen und Updatezyklen, schon ohne es gestestet zu haben, sketpisch! Ich werde also gleich nativ die DB quälen, und vielleicht für Update von Bestellungen die RestApi verwenden. Hast du vielleicht irgendwo ein ER-Diagramm gefunden? Gruß Thomas
Ein Diagram hab ich nicht zur Hand… Im MySQL Tools Package gibt es einen kostenlosen DB-Designer der bestehende Datenbanken in Diagramme umwandelt. Man kann auch Felder hinzufügen und danach wieder das SQL Ausgeben: http://dev.mysql.com/downloads/workbench/5.2.html Gruß Mablae
Ich würde nur über den Datenbanklayer gehen, wenn du wirklich extreme Performanceprobleme hast: Die Shopware API handhabt zB auch entsprechenende Abhängigkeiten wie Bildergrößen, Rotating Tables zwischen Articles und Categories, etc. Wenn es doch danach geht, kannst du auch einfach mit Doctrine entsprechende Metaklassen erstellen und daraus dann die gemappten Entities. Auch Doctrine2 ist mittlerweile nicht mehr so besch… wie der Vorgänger und kann durchaus größeres Queues ohne größere Performanceprobleme handhaben. Doctrine ansonsten halt auch kein Layer der für Importschleifen konzipiert wurde - Das Projekt erhält seine Stärke vor allem durchs Caching. Ich hoffe hier natürlich, dass die Shopware Entwickler bald nachziehen und die Prozesse optimieren. Ansonsten geh einfach über die HTTP Restful API oder nutze die entsprechenden Klassen von Enlight. Ich schiebe über nacht jeweils 5000 Artikelupdates über HTTP rein. Insofern man ein wenig Ahnung von Performance hat und man versteht was Laufzeit überhaupt bedeutet, ist das ganze kein Problem. ( Etwas dauern tut es trotzdem. Bei 5000 Artikeln mit Bildern so ca 45 Minuten bis der ganze Index aufgebaut ist usw. Ist in dem Fall aber verkraftbar ) VG
Wegen des Mappings: Man kann natürlich auch einfach die Shopwaremodel reinladen --> hat den Vorteil, dass man auch direkt alles Foreigns etc hat.
Mit der Verwendung von enlight wäre ich vorsichtig. Irgendwie verschwinden gerade alle Verweise auf der Shopware-Seite.
Enlight ist deprecated. Und das ist gut so.