fehlerrückgabe API REST

Hallo forum,
ich hätte da mal ne frage und zwar verwende ich die API REST um daten in den shop zu importieren und um sie dort zuändern.
das klappt auch wunderbar, jetzt möchte ich daraus ein cronjob machen.
mir geht es um die success- bzw. fehlerrückgabe.
wenn ich ein put schmeisse bekomme ich im erfolgsfall ein array zurück mit u.a. success aber wenn ein fehler entstanden ist, ist dieses array leer.
was für die fehlerverarbeitung natürlich nicht hilfreich ist. 
gibt es ein möglichkeit auch die fehlermeldung in einen array zu packen?

danke schonmal:-)

mfg
dutchy 

Du solltest eigentlich einen HTTP Code 500 (oder einen anderen 5er) zurückbekommen. Daran erkennst Du dann, dass etwas schief gelaufen ist. Für gewöhnlich erhältst Du auch eine Error Message. Wenn Du mit CURL arbeitest, sollte die Exception im Connection Objekt zu finden sein.

Schonmal vielen dank für antwort:)
klar bekomme ich eine fehlermeldung, diese möchte gerne automatisiert abspeichert.
da bringt es mir nicht viel, wenn ich auf dem bildschirm die meldung habe und diese nicht abspeichern kann, verstehst?

@dutchy‍ nutzt du die Shopware API Klasse? Hier: http://community.shopware.com/Shopware-4-REST-API-verwenden_detail_989.html#Der_API_Client

Hier die REST Doku für Shopware 5:
REST API - Basics

Du kannst eine Exception auf zwei Wegen loggen:

Entweder PHP übernimmt das für Dich (php.ini entsprechend konfigurieren, damit Exceptions nicht ausgegeben werden sondern in ein .log wandern - sollte in Produktivsystemen übrigens immer so gehandhabt werden.). Oder Du catcht den Error und logst ihn in Deinem Programm selbt mit der Symfony logging Klasse.

@Synonymous‍ , hast du auch mal ein praktisches Beispiel anhand der REST API von Shopware für uns Laien, wie ein Fehler im Array ausgegeben werden kann?

// Try to update an article. If a NotFoundException is thrown create the article
try {
    if ($article = $articleResource->updateByNumber($line[0], $articleData)):
        $this->log('success',
            'Article ' . $article->getMainDetail()->getNumber() . ' successfully updated (CSV line Nr. '.$lineCount.').');
    endif;

} catch (\Shopware\Components\Api\Exception\NotFoundException $e) {

    try {

        if ($article = $articleResource->create($articleData)):
            $this->log('success',
                'Article ' . $article->getMainDetail()->getNumber() . ' successfully created (CSV line Nr. '.$lineCount.').');
        endif;

    } catch (\Exception $e) {
        $this->log('error',
            'Exception while trying to create article ' . $line[0] . ':' . $e->getCode() . ': ' . $e->getMessage());
    }

}

 

@Synonymous‍ , Ah, super, da kann der Threadersteller jetzt was mit anfangen.

@dutchy‍ angefragte Möglichkeit dabei die Fehlernmeldung im Fehlerfall welche statt des Erfolges den Fehler im Array zurück zu erhalten? Das Array bleibt ja weiterhin leer.

Im Exception Objekt hast Du sowohl Error Code als auch Error Description.

@Synonymous schrieb:

Im Exception Objekt hast Du sowohl Error Code als auch Error Description.

 Genau da ist ja das Problem. Wenn ich mit $ergebnis = $client->get(‘articles/3’);

Den Artikel mit der Nummer 3 abfragen möchte erhalte ich in der Variable $ergebnis ja die Daten zum Artikel 3. Wenn der Artikel jedoch nicht existiert, bleibt das Array leer. Aber genau das will der Threadersteller ja auswerten, dass die Fehlermeldung im Rückgabewert zu sehen ist.

 

Aber Du erhältst in diesem Fall ja eine \Shopware\Components\Api\Exception\NotFoundException… Das sollte ja als Aussage reichen, dass der Artikel nicht gefunden wurde. Viel genauer geht es eigentlich gar nicht. GET wird hier sicher genauso die entsprechende Exception werfen.

@Synonymous‍ ,  mit deiner " Shopware\Components\Api\Exception\NotFoundException " kann ich leider nichts anfangen. Der Threadersteller und ich möchten ja gern wissen, warum das Array leer ist wenn ein Fehler mit dem Artikel auftritt.

Du redest da in Rätseln. Wir möchten nicht wissen von irgendwelchen “Exception im Connection Objekt oder ob ein Exception Objekt im Error Code als auch eine Error Description hat”

Du scheinst Programmierer zu sein, wir sind Anwender daher nur Bahnhof oder kennst du die Lösung warum das Array leer ist und wie es zu füllen geht? Dann sei doch bitte so nett und teile dein Wissen mit uns.

Zum Hintergrund ist derer, wir erhalten über die Fotolia Schnittstelle die Rückgabewerte der Bilder über Suchanfragen in unserem Shop, dabei wird geprüft ob der Artikel bereits existiert bei uns in Shopware und wenn nicht, dann wird der Artikel angelegt, daher benötigen wir auch im Fehlerfall das Array mit Werten. Wenn der Artikel exisitiert erhalten wir ja über die $ergebnis Variable die Daten des Artikel und können damit arbeiten. Das ist der eigentliche Hintergrund bei uns im Shop, doch wenn wir den Fehlercode bekommen möchten und das Array leer ist, wenn der Artikel nicht existiert, macht das die Sache bei uns zum Problem, da nichts passiert.

Ihr sprecht hier von REST API und Arrays aber seid keine Entwickler? Ich kann Euch hier nur die Lösung über das Abfangen der Exceptions des CRUD Objekts anbieten - das ist nun mal die softwaretechnische Lösung dafür.

@Synonymous schrieb:

Ihr sprecht hier von REST API und Arrays aber seid keine Entwickler?

Wir reden hier von nichts anderem, über die REST API von Shopware im Rückgabewert eines Arrays im Fehlerfall einen Rückgabewert zu erhalten. Hast du den Eingangspost nicht gelesen?

Natürlich… aber was machst Du mit dem Array? Ausdrucken?
Denke ich nicht… Den wirst Du ja weiterverarbeiten.

Ausdrucken nicht *lach,

Richtig weiterverarbeiten je nachdem was für ein Fehler drinn steht. Aber da das Array leer ist nützt es mir derzeit nichts.

So richtig kommen wir hier nicht weiter, schade, da auch der Threadersteller sich nicht mehr hier zu Wort meldet denke ich ist die Sache eh erledigt, da auch andere keine Lösung haben und du als Entwickler auch nicht bin ich erstmal raus hier.

Grüße

 

Aber WOMIT verarbeitet ihr die Daten weiter? Greift ihr die API direkt mit einem anderen System ab? Oder mit sowas wie einen Enterprise Service Bus? In jedem Fall bekommt ihr einen entsprechenden HTTP Error Code.

Die Lösung für eine Umsetzung in PHP habe ich oben als Sourcecode gepostet… 

Die Daten verarbeite ich mit einem PHP Script weiter welches ja durch die Rest API eine Rückgabewert von Shopware erhält in der Variable $ergebnis so wie in meinem Beispiel gepostet. Nur im Fehlerfall bekomme ich in der Variable $ergebnis keinen Wert. Das Array bleibt leer.

“Enterprise Service Bus”? Ich wollte mit keinem Raumschiff fliegen :wink:

Deine Lösung nutzt mir persönlich nichts, obs dem Threadersteller nützt, wissen wir nicht, da er sich nicht geäußert hat bisher ob es ihm weiterhilt.

Ich persönliche habe mich nur eingeklinkt, weil ich auch einen Rückgabewert im Fehlerfall im Array benötige für die Weiterverarbeitung.

Ich glaube wir reden hier völlig aneinander vorbei.