REST API - Grundlegende Fragen

Hallo an alle Ich mache mir gerade Gedanken zur REST API und deren Wirkungsweise. Dafür habe ich ein erdachtes Szenario: Angenommen ich habe im Web einen Shopware-Shop mit tausenden Artikeln. Jetzt möchte ich von Zuhause aus per Script überprüfen, ob jeder Artikel z.B. im Freitextfeld 1 auch den Artikelnamen + ID drin stehen hat. Dafür käme ja die REST-API wie gerufen. Also würde ich jetzt alle Artikel auslesen und jeden auf dieses Freitextfeld überprüfen. Falls Name + ID drin stehen ist alles i.O., falls nicht muss dieser Wert hinterlegt werden. Der Einfachheit könnte man einfach alle Artikel durchlaufen und immer Namen + ID in das Freitextfeld schreiben (egal, ob da vorher schon was stand). Und als kleine Überprüfung, ob meine ganze Ausleserei auch funktioniert, soll es mir immer den Namen + ID im Browser ausgeben. Nicht mehr und nicht weniger. Zu Beginn würde ich erst einmal schauen, ob die API überhaupt greift und mir den Namen + ID jeweils anzeigen lassen: [code]<?php include (“api.class.php”);

$client = new ApiClient(
http://www.meinShop.de/api’,
‘mike’,
‘yox6oyar4fyF9yInL2S123456789G5xJnBPuEIX9’
);

$articles = $client->get(‘articles’); foreach($articles AS $article){ $articleID = $article[‘ID’]; $articleName = $article[‘name’]; print 'Name: ‘.$articleName.’ - ID: ‘.$articleID.’
'; } ?> [/code] Und genau das funktioniert schon nicht. Im Browser wird gefühlt der komplette Shop als Array angezeigt und für meine Variablen $articleID und $articleName bekomme ich Fehlermeldungen ala „Illegal string offset ‘id’“. Daher meine Fragen: [list] - Warum wird überhaupt so ein Array im Browser ausgegeben? Das möchte ich doch gar nicht. Es soll nur meine Testzeile oder ansonsten gar nichts ausgegeben werden. - Muss dies mit der Browseranzeige überhaupt so sein? Falls ja, wie will man denn die REST-API dann in fremde PHP-Scripte integrieren? Man will ja eigentlich mit den Variablen arbeiten und nicht mit der Browseransicht. - Warum wird mir beim Auslesen gleich ein Fehler angezeigt? Müsste meine Abfrage nach ID und Name anders aussehen? [/list] Vielleicht hatte ja jemand diese Probleme schon mal und konnte sie beheben. Über Rückmeldung würde ich mich sehr freuen :sunglasses:

Hi Mike, gehen wir mal deine drei Fragen am Ende durch: zu 1: Ist das der Beispiel-Shopware-Client aus dem Wiki? Wenn ja, guck dir da mal die prepareResponse-Methode an. Da wird die Antwort vom Server direkt ausgegeben. Womit wir direkt bei 2 sind: Nein, das muss nicht so sein, dass ist nur ein Beispiel mit dem man schnell testen kann ob/wie die API funktioniert. Für den Produktiveinsatz musst du die Daten natürlich nicht ausgeben. 3: versuch mal id statt ID :wink:

1 Like

Hi Timo Vielen Dank für die schnelle Rückmeldung. Der Kode der API-Klasse war aus dem Wiki. Und ja, dort stehen einige echo-Befehle drin. Wenn man die auskommentiert funktioniert’s :thumbup: Die Kleinschreibung von „id“ macht natürlich Sinn, aber es ging trotzdem nicht. Es kam eine analoge Fehlermeldung. Mit folgender Schleife ging’s dann aber: foreach($articles AS $article){ if(is\_array($article)){ foreach($article AS $el){ $articleID = $el['id']; $articleName = $el['name']; print 'Name: '.$articleName.' - ID: '.$articleID.' '; } } } Also, funktioniert letztendlich doch alles irgendwie :happy:

Stimmt der direkte zugriff auf $article[‚id‘] kann gar nicht funktionieren… Du bekommst nämlich nicht nur die Artikeldaten zurück, sondern auch noch eine Statusmeldung. Die eigentlichen Daten stehen in deinem fall in $articles[‚data‘]. Korrekter wäre es eigentlich die Rückgabe vom $client->get(); in eine Variable zu speichern (z.B. $response), diese dann zu prüfen und danach erst über $response[‚data‘] auf die eigentlichen Artikeldaten zuzugreifen.