Verwendung der REST-Api

Hallo, ich habe gerade versucht PHP Code Beispiele im Forum zu finden wie ich mit der REST Api richtig umgehe, leider gab es nicht die Ergebnisse die ich erhofft habe. Also ich rufe ja mit $client-\>get('articles/XXX) Artikel ab, allerdings werden die Ergebnisse direkt ausgegeben, ein Speichern in eine Variable oder so ändert das nicht. Was mach ich da gerade falsch? In der Methode „get()“ vom ApiClient kann man $params in array Form übergeben, aber was genau kann ich da übergeben, was genau erhalte ich? Irgendwie fehlt da doch ein Stück Doku oder Info, oder irre ich? Vielleicht kann mir hier wer helfen? Vielen Dank :slight_smile:

Du kannst PHP aber schon oder? Ich meine du bräuchtest bloß anstatt des echo in dem DEMO Client ein return geben und schon kannst du das auf ne Variable geben.

haha… sorry. Ich hab das garnicht gelesen. Boah tut mir leid! :smiley: Aber das mit dem $params array in der get() Methode würde mich noch interessieren.

Schau mal hier http://php.net/manual/de/book.curl.php Wie die Parameter aussehen welche du mit params mit übergibst steht teilweise in den Beispielen zur REST-API und außerdem hier im Forum. Ich habe da auch suchen müssen. Es wäre mir wesentlich lieber gewesen man hätte in der Doku nur mit CRUD und JSON Queries gearbeitet sodass man weiß was man an den Server schicken muss und was zurück kommen muss und nicht wie ein Client in PHP aussieht sodass man wieder von PHP zu einer anderen Programmiersprache mappen muss.

Hi, hast du unsere Wiki Artikel schon gesehen? http://wiki.shopware.de/Shopware-4-API- … 0_869.html Gruß Patrick Schücker

Wird da die Frage welche Parameter ich in der get() angeben kann geklärt?

Hi, die get() Funktion wird zumindest einige male Verwendet. Vielleicht hilft dir das ja weiter. Du solltest dir am besten auch die anderen Tutorials mal anschauen… Gruß Patrick

Hi, gibt es eigentlich irgendwo übersicht über alle parameter (articles, categories etc.) die man über die API ansprechen kann? Wie schauts z.B. mit erstellen der Filter, da diese ja vor dem Artikelimport definiert werden müssen? Wie kann man hierbei die Artikelbilder importieren ? Gruß Edin

Schöne Fragen! :slight_smile: Ich bin auch gespannt!

Hi, nein, eine vollständige Übersicht gibt es nicht, wir haben da nur die von Patrick verlinkte Liste mit vielen Beispielen. Grundsätzlich gibt es die Übersicht auch deswegen nicht, weil die (REST)-API auf Doctrine aufsetzt und man die möglichen Felder entweder direkt den entsprechenden Models oder (bei Assoziationen) der API selbst entnehmen kann. Das ist für den Einstieg sicher erstmal eine Hürde, das habe ich damals nicht ganz richtig eingeschätzt. Von daher: Ist notiert, kurzfristig kann ich da aber leider keine komplette Übersicht bereit stellen. Wenn die Beispiele nicht helfen, müsstet ihr also wirklich in die Models / die Ressourcen schauen. lG Daniel

Hallo Daniel schade, dass es noch keine Übersicher der aktuell verfügbaren API gibt. Aber wenn da was kommt, dann kommt es ja immerhin :slight_smile: Hast du meine Frage bezüglich der $params gesehen? Kannst du mir dazu etwas sagen? Danke dir!

Hi Daniel, irgendwie verstehe ich das nicht so ganz. Also ich hab herausgefunden dass die verfügbaren urls den php Dateien unter /Shopware/Controllers/Api vom Namen her entsprechen, also z.B. gibt es da PropertyGroups.php und unter domain/api/propertygroups bekomme ich tatsächlich die Sets und dazugehörigen Groups (allerdings keine Values). Unter /Shopware/Models käme ich, wenn ich ein Plugin entwicklen würde, auf jede Information aus der Datenbank (über Doctrine), aber wie komme ich darauf über die Rest API ? Da habe ich kein Zugriff auf die Model Klassen. Wo ist also die Brücke zwischen der Rest API und der Doctrine Models? Ich habe z.B. versucht folgendes in einem Script zu machen: $client-\>post('propertygroups', array( 'name' =\> 'Hose', 'comparable' =\> false, 'sortMode' =\> 2, 'options' =\> array( array( 'name' =\> 'Farbe', 'filterable' =\> 1, 'values' =\> array( 'value' =\> 'Blau', ), ), array( 'name' =\> 'Größe', 'filterable' =\> 1, 'values' =\> array( 'value' =\> 'XL', ), ), ), )); Bekomme aber folgenden Fehler (auch dann wenn ich values Arrays auf options array rausnehme: [code]>No Success

Errormesage: Found entity of type on association Shopware\Models\Property\Group#options, but expecting Shopware\Models\Property\Option

[/code] Wenn ich das Option Array rausnehme, wird tatsächlich ein Set angelegt. Vielleicht kann man diese Verknüpfung zu Doctrine Models an meine Beispiel erklären und mir zeigen wo der Code Fehler liegt? Vielen Dank und Beste Grüße, Edin

Hi, wie du richtig beschreibst, schlägt dein Request letztlich hier auf: /engine/Shopware/Components/Api/Resource/PropertyGroup.php Dort wird die create-Methode abgearbeitet. Der Call, der dich da interessiert, ist der fromArray()-Call. Hier werden die Werte aus deinem Array automatisiert im Model gesetzt und dann persistiert. Das geht automatisch, darum kann man sich da einfach an den Doctrine-Models orientieren. Das Problem: Assoziierte Daten (Optionen für Gruppen) können nicht ohne weiteres automatisiert gesetzt werden. Dafür ist dann in den API-Ressourcne jeweils eigene Logik hinterlegt. Das ist bei den PropertyGroups nicht der Fall, die sind zZt nur dafür da, Gruppen zu erzeugen. Die dazugehörigen Optionen werden über die Artikel-Ressource angelegt (das ist etwas verwirrend, das stimmt). Wenn du dir in der Artikel-Ressource die Methode “preparePropertyValuesData” ansiehst, kannst du da sehen, wie aus dem Unter-Array “propertyValues” die entsprechenden Models geladen/erzeugt werden. Wenn die entsprechenden Models erstmal geladen sind, können sie wieder mit “fromArray” automatisch im Model gesetzt werden. Darum meitne ich vorher, dass man sich die Assoziationen in der API selbst ansehen muss. Dort kann man sehen, welche Felder wie aufbereitet werden, die wichtigsten Beispiele haben wir (hoffentlich) im Wiki erschlagen, weitere Doku ist geplant. Nochmal kurz in anderne Worten: Die Hauptaufgabe der API-Ressourcen ist es eigentlich, die übergebenen Arrays so aufzubereiten, dass die einfach mit “fromArray” in die Doctrine-Models gesetzt werden können. Sehr viel mehr passiert da nicht.

Hi Daniel, okay danke, ist erstmal n wenig verwirrend, muss mir wohl genau anschauen was du meinst :slight_smile: Aber erstmal bin ich froh dass es überhaupt geht (soweit ich das jetzt richtig verstehe) und ich habe ein Paar neue Ansatzpunkte, das reicht mir als Motivation mich durch die Geschichte durchzuarbeiten :slight_smile: Viele Grüße, Edin

Hi, wollte nur noch anmerken, dass die Geschichte mit Properties, wie von Daniel beschrieben doch in der Doku erwähnt wird: http://wiki.shopware.de/_detail_1070_86 … enschaften Die Herangehensweise ist also erstmal, Groups über propertyGroups Ressource anlegen, und dann werden beim Artikel anlegen die Optionen und Values definiert. Wenn die nicht bereits definiert wurden, werden die neu erzeugt, ansonsten die bestehenden übernommen. Danke nochmals für den Hinweis und Viele Grüße, Edin