HTTP-Status 204 (no content) bei API Request PATCH, POST & DELETE

Hallo Zusammen,

ich baue grad eine Shopware 6 Schnittstelle für CAO-Faktura.

Ich nutze das Format “application/json”, da es besser kompatibel zur alten Schnittstelle ist (weniger Arbeit). Bei den API Requests PATCH, POST & DELETE bekomme ich eine HTTP-Status 204 und somit keinen Response (bei allen Resourcen). Für PATCH & DELETE ist es nicht weiter schlimm. Bei POST jedoch habe ich nicht die Möglichkeit die neue ID zu erfahren.

Lt. Swagger UI sollte eigentlich für POST der HTTP-Status 201 (created) inkl. Response zurückkommen.

An was könnte das liegen?

 

Hallo,

Niemand eine Idee, warum ich über die Rest-API bei POST & PATCH Anfragen keinen Content zurückbekomme (Format: „application/json")? Ansonsten funktioniert die Anfrage - Änderungen werden durchgeführt und Neuanlage funktioniert auch.

Ich hab Shopware 6 aktuell lokal installiert mit einem Docker Container. Das Containerfile für php ist wie folgt definiert:

FROM php:7.2-apache

 

RUN apt-get -y update --fix-missing

RUN apt-get upgrade -y

 

Install useful tools

RUN apt-get -y install apt-utils nano wget dialog

 

Install important libraries

RUN apt-get -y install --fix-missing apt-utils build-essential git curl libcurl4 zip

RUN apt-get -y install libssl-dev libcurl4-openssl-dev pkg-config

 

Composer

RUN curl -sS https://getcomposer.org/installer | php – --install-dir=/usr/local/bin --filename=composer

 

Install xdebug

RUN pecl install xdebug-2.5.0

RUN docker-php-ext-enable xdebug

 

Other PHP7 Extensions

 

RUN apt-get -y install libmcrypt-dev

RUN docker-php-ext-install mcrypt

 

RUN apt-get -y install libsqlite3-dev libsqlite3-0 mariadb-client

RUN docker-php-ext-install pdo_mysql 

RUN docker-php-ext-install pdo_sqlite

RUN docker-php-ext-install mysqli

 

RUN docker-php-ext-install curl

RUN docker-php-ext-install tokenizer

RUN docker-php-ext-install json

 

RUN apt-get -y install zlib1g-dev

RUN docker-php-ext-install zip

 

RUN apt-get -y install libicu-dev

RUN docker-php-ext-install -j$(nproc) intl

 

RUN docker-php-ext-install mbstring

RUN apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev

RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 

RUN docker-php-ext-install -j$(nproc) gd

 

Install and enable PHP OPCache & APCu

RUN docker-php-ext-install opcache \

    && docker-php-ext-enable opcache \

    && pecl install apcu-5.1.5 \

    && docker-php-ext-enable apcu

 

Enable apache modules

RUN a2enmod rewrite headers

Hallo  ffetech,

in Shopware 6 werden UUIDs verwendet. Du kannst daher die IDs schon im Vorfeld selber erzeugen. Du brauchst nur eine Bibliothek die UUIDs 4 erzeugen kann.

1 „Gefällt mir“

Hi Jens_K,

Danke für deinen Vorschlag, das würde mein Problem tatsächlich lösen. So mach ich dass dann auch.

Dennoch lt. Dokumentation bzw. lt. Swagger UI sollte es eigentlich einen Response geben. Vielleicht hat noch jemand eine Idee dazu …

Ansonsten kann man die UID auch einfach selbst erstellen bei POST.

Hi,

steht vor der selben Herrausforderung und bekomme leider auch nur Status 204 zurück …ohne die erzeugte UUID oder irgendeinen weiteren Content.

Welche Bibliothek nutzt ihr dann zum Erzeugen der UUID ?

 

Gruß

Hat bei mir so auch noch nicht geklappt:

https://forum.shopware.com/discussion/62042/patch-product

1 „Gefällt mir“

Hi tremonti,

kommt drauf an welche Sprache. Ich nutze für mein Projekt .Net C#.

In php erstellst Du eine UID z. B. so:

https://www.php.net/manual/de/function.com-create-guid.php

1 „Gefällt mir“

@tremonti schrieb:

Hat bei mir so auch noch nicht geklappt:

https://forum.shopware.com/discussion/62042/patch-product

Manchmal ist da auch der Wurm drin. :slight_smile:

Es hat nun doch mit dem Parameter  ?_response=basic funktioniert.Bekomme nun HTTP-Code 200 und die Artikeldaten zurück.
Bin mir aber noch nicht sicher, ob ich mir wirklich die UUID selbst generieren möchte. Daher überlasse ich es erstmal dem Shopware System.
 

1 „Gefällt mir“

Hallo Zusammen,

ich hab das Anlegen (POST) mit eigener GUID nun ausprobiert für Hersteller, Kategorien und Produkte. Es funktioniert soweit.

Nun gibts aber noch ein anderes Problem - ich bin mir nicht sicher aber sieht nach einem Bug aus.

Wenn man kurz danach den selben Datensatz (gilt für Hersteller, Kategorien und Produkte) nochmal holen (GET) möchte, dann ist dieser nicht auffindbar:

“The product resource with the following primary key was not found: id(e7b04254c97c4bc6a9104fc81c79375c)”

Wenn man eine längere Zeit wartet, dann funktionierts auf einmal. Hat wahrscheinlich was mit Caching zu tun.

Hallo  ffetech, konntest Du das Problem (Cache) schon lösen?

Ich habe ein ähnliches Problem. Ich bekomme Daten, selbst wenn ich diese dierekt im Backend anlege, erst spät via API aufgerufen. 

In der .env habe ich schon SHOPWARE_HTTP_CACHE_ENABLED=0 gesetzt. Auch habe ich mal APP_ENV=dev gesetzt und den cahce im Backend geleert.

Weiterhin kommt ein simples PATCH /category/{categorieId}   {description: “Neue Beschreibung”} oder auch {data:{description: “Neue Beschreibung”}} nicht im Shop an obwohl dieser mit 204 bzw. mit 200 (?_response=basic) ausgeführt wird. 

Ich vermute auch hier, dass da noch irgendwo etwas gecached wird. 

Hi nesh, welches API Format verwendest Du? application/json oder application/vnd.api+json? Ich bin mittlerweile umgestiegen auf application/vnd.api+json und hab damit nun überhaupt keine derartigen Probleme mehr. Das liegt wahrscheinlich daran, da auch das Shopware Backend mit dieser API arbeitet wodurch Probleme viel schneller auffallen. Außerdem lassen sich alle API Calls im Backend perfekt z. B. über die Chrome Developer Tools (Network) nachvollziehen, was eine ausführliche Dokumentation fast überflüssig macht.

1 „Gefällt mir“

Hallo ffetech, 

ich wollte es erst mal vermeiden vnd.api+json zu verwenden, weil ich mir schon (zu) übereifrig Klassen erstellt habe die auf der json Response basieren (De)Serialisierung
Vermutlich komme ich da aber erst mal nicht drum rum :frowning:

Danke für deinen Tip. Ich werde berichten…

Nesh

 

 

 

Hi nesh,

so ähnlich ist es mir auch ergangen. Aber im Nachhinein bereue ich es nicht. Besser wärs gewesen, man hätte erst gar nicht die Wahl gehabt. 

Kennst Du übrigens die Json:Api Spezifikation hier https://jsonapi.org/

Gute Grundlagendokumentation für die Shopware API.

LG Florian

 

1 „Gefällt mir“

Hallo ffetech, 

es geht natürlich so wie von dir vorausgesagt wenn man das via ‘vnd.api+json’ macht. 

und ja, DU HAST RECHT: Hätte ich auch von afang an so machen sollen :-) 

Die Spezifikation kenne ich nur oberflächlich, werde mich aber damit genauer beschäftigen.

Mein Task ist es, in den nächsten Wochen ein ERP System komplett an zu binden. Und zwar so “tief” so dass das ERP System in den Bereichen Artikel / Varianten, Bestellungen, Status das führende System ist und Adressen Biderektional.

Da ich vermute, das Du mit deiner implementierung schon viel weiter als ich bist, werde ich vermutlich hier und da mal auf dich zukommen… 

Hi Nesh,

klar meld dich gerne jederzeit, gerne auch per Mail. Darf ich fragen welches ERP System?

Hier ein paar Details zu meiner Schnittstelle:

https://www.ffe-tech.com/products/connect/cao-shopware/

Hallo ffetech, 

klar darfst Du fragen :slight_smile:

 

Sehr cool :slight_smile: In was baut Ihr? ASP .Net Core oder Delphi hab ich auch gelesen? Mit Delphi hatte ich auch von 2002 bis 2014 gearbeitet. Nun bin ich voll im ASP .Net Core Blazor Razor etc. …Fieber. Die Entwicklung von .Net Core sieht aktuell meiner Meinung nach sehr sehr vielversprechend aus. Vielleicht sollten wir langsam auf Mail umsteigen :wink: Wie gesagt meld Dich gerne jederzeit bei Fragen.