Rest API -> PUT oder POST

Hallo zusammen, wenn ich über die REST-API Kunden bzw. Artikel importiere mache ich das per PUT oder POST. Soweit ist das ja klar. Aber wie kann ich denn prüfen ob PUT oder POST nötig ist wenn ich mir nicht sicher bin ob der Kunde schon angelegt ist. Beim Import entscheidet der Import ja auch selbständig ob der Kunde neu angelegt oder verändert wird. Viel Grüße Alexander

Hallo Alexander, das Import-Skript testet letztlich auch nur, ob ein bestimmter Artikel/Kunde/wasauchimmer bereits existiert und macht davon abhängig entweder ein Create oder ein Update. Zur Zeit gibt es da keine Möglichkeit, das in einem Rutsch zu machen. Du kannst letztlich nur über die GET prüfen, ob ein bestimmter Artikel bereits existiert (dafür gibt es ja jetzt den ‘useNumberAsId’ Parameter, so dass ein bestehender Artikel über eine Bestellnummer gefunden werden kann) oder erstmal ein Update fahren und dann ggf. den Fehler abfangen. Die zweite Variante wäre dabei vermutlich performanter, weil GET im Erfolgsfall ja allerhand Daten lädt und verschickt, du du eigentlich gar nicht haben willst. lG Daniel

Ich klinke mich da mal kurz ein. Ich mache erste ein Import und falls dies fehlschlägt ein Update: //Articledata $article= array( 'name' =\> 'NeuerTestartikel123', 'active' =\> true, 'tax' =\> 19, // alternativ 'taxId' =\> 1, 'supplierId' =\> 1, // alternativ 'supplierId' =\> 2, 'mainDetail' =\> array( 'number' =\> 'swTEST' . 123, 'inStock' =\> 16, 'prices' =\> array( array( 'customerGroupKey' =\> 'EK', 'price' =\> 99.34, ), ) ), ); //Article import $execute = $client-\>call('articles', ApiClient::METHODE\_POST, $article); //Article update if (!$execute['success']) { echo "error"; $execute = $client-\>call('articles/swTEST123?useNumberAsId=true', ApiClient::METHODE\_PUT, $article); } Soweit funktioniert das auch. Aber wenn das Update ausgeführt wird, erhalte ich folgende Meldung: HTTP: 302 Could not decode json json_last_error: Syntaxfehler Raw: Ausgeführt wurde aber alles richtig. Sprich der bestehende Artikel wurde verändert. Aber was sagt die Meldung aus?

Hat mir dazu jemand eine Info? Warum kommt beim Update ein Syntaxfehler, aber es wird trotzdem erfolgreich ausgeführt?

Hy, ich habe das gleiche Problem. Hat bereits jemand eine Lösung dafür gefunden? Gruß, Arne

Hi, deaktiviert einmal bitte nach einander alle nicht Shopware Plugins, leert den Cache und versucht erneut die API anzusprechen. Es gab z.B. bei diesem Plugin „Detailseite Herstellerbild“ ein Problem, da dieses ungültige UTF-8 Zeichen enthielt. Aus diesem Grund konnte die Rückgabe nicht mehr in JSON decodiert werden. Viele Grüße, Marcel

Bei mir geht das PUT jetzt lokal. Sprich wenn ich eine PHP Datei erstelle die den Aufruf direkt auf der Kiste macht. Die Lösung war bei mir die letzte Zeile in der Funktion „putAction“ in der Datei „Articles.php“ auszukommentieren. Keine Ahnung ob das noch andere Auswirkungen hat.:slight_smile: Gruß, ABI

Hallo, vermutlich werden hier Fehlermeldungen über den globalen Errorhandler im Self-Healing-Plugin verschluckt. Könntet Ihr bitte mal folgenden Patch ausprobieren. In der Datei /engine/Shopware/Components/Api/Resource/Resource.php die Methode flush() durch diese Ersetzen: /\*\* \* @param object $entity \* @throws \Exception \*/ public function flush($entity = null) { if ($this-\>getAutoFlush()) { try { $this-\>getManager()-\>flush($entity); } catch (\Exception $e) { throw new \Exception($e-\>getMessage(), 0, $e); } } } Viele Grüße, Benjamin Cremer :shopware:

1 „Gefällt mir“