REST API - Adressen aktualisieren

Hallo zusammen,

bin gerade dabei, über die REST API von Shopware eine Schnittstelle zwischen meiner WaWi, dem alten Shop zwecks Datenübernahme und Shopware zu basteln. Artikel, Kunden und alles hat auch wunderbar geklappt, aber bei den Adressen bin ich auf ein Problem gestoßen.

Ich erstelle Kundendaten basierend aus den Daten des alten Shops und erzeuge über die REST API einen neuen Kunden (POST => customers), beim Update wird er dann über PUT => customers/custID aktualisiert. So weit so gut. Nach den Kunden übermittele ich dann die einzelnen Adressen (POST => addresses), geht auch noch, tauchen auch im Backend beim Kunden korrekt auf. Wenn ich dann aber die einzelnen Adressen updaten will, schlägt jedes Update fehl. Keine Ahnung warum, aus der Anleitung bin ich auch nicht wirklich schlau geworden.

Ich habe es erst übert PUT address/addID versucht - analog zur Doku „http://my-shop-url/api/address/id“. Das hat aber nicht geklappt. Auch der Versuch, es über addresses/id zu updaten, schlägt ohne sinnreiche Meldung fehl: „Could not decode json (json_last_error: No error occurred Raw: )“. Sowohl ID der Adresse als auch ID des Kunden sind im PUT-Array enthalten, das POST klappt ja auch tadellos. PUT array ist nahezu identisch zu POST array, nur zusätzlich mit dem Feld „id“ ausgestattet. Der Versuch, das PUT array mit der ID einfach als POST zu übermitteln hat dann dazu geführt, dass die Einträge mehrfach vorhanden waren

Habe ich da irgendwo einen Denkfehler oder ist da ein Bug? Die Daten werden in der DB jedenfalls nicht geupdated …

Ich weiß nicht weiter und würde mich über Infos & Vorschläge freuen, danke schon mal im Voraus!

Liebe Grüße,

Rüdiger

Hab die Lösung gerade selbst gefunden. Falls noch jemand auf das Problem stoßen sollte:

Beim POST muss im Feld „customer“ die CustomerID stehen, beim PUT darf die ID scheinbar nicht mehr drinstehen, sonst gibt es den oben genannten Fehler …

1 Like

Hi animeversand!

Wir haben uns das Thema einmal angesehen, das Verhalten hier ist (im Grunde) tatsächlich gewollt, jedoch nicht gut implementiert.

Der Hintergrund ist der Folgende: Die Kernfunktionalität um die es hier am Ende geht ist die Änderung des Customers, der an einer Adresse hängt. Es ergibt aber keinen Sinn eine Adresse von einem zum anderen Customer zu verschieben, weshalb wir das nicht unterstützen. Das ist aber natürlich in keiner Weise ersichtlich aus dieser Fehlermeldung (wie Du leider bemerkt hast), und das müssen wir ändern.

Daher werden wir folgende Anpassungen vornehmen:

  • Wird beim PUT ein customer angegeben, dann prüfen wir ob die übergebene Customer-ID mit der aktuell an der Adresse hängenden Customer-ID übereinstimmt (so wie in Deinem Fall). Dann funktioniert einfach alles.
  • Wird eine Customer-ID mit angegeben und sie stimmt NICHT mit der an der Adresse überein wird eine entsprechende Fehlermeldung geworfen: „Changing a customer id on addresses is not supported“.
  • Wir dokumentieren das Verhalten an der Address-Ressource in den DevDocs.

Vielen Dank für Deinen Hinweis auf das problematische Verhalten! Den weiteren Prozess kannst Du in folgendem Ticket verfolgen: Shopware Issuetracker

Hendrik

1 Like