JSON Requests in Python
Mit JSON Requests lässt sich einiges anstellen. Das wahrscheinlich interessanteste, nämlich die Abfrage von Daten und was dabei beachtet werden muss, soll in diesem Artikel kurz erklärt werden. Wer beim programmieren auf Daten angewiesen ist, wird früher oder später schon einmal über JSON gestolpert sein.
Die JavaScript Object Notation (JSON) hat an sich nicht viel mit JavaScript zu tun, sondern beschreibt lediglich ein kompaktes und gut lesbares Datenformat. Aufgebaut ist eine JSON Datei im Grunde wie ein Python Dictionary. Die Daten können beliebig verschachtelt werden, JSON Elemente können also auch Listen oder weitere JSON Objekte beinhalten.
{ "Herausgeber": "Xema", "Nummer": "1234-5678-9012-3456", "Deckung": 2e+6, "Waehrung": "EURO", "Inhaber": { "Name": "Mustermann", "Vorname": "Max", "maennlich": true, "Hobbys": ["Reiten", "Golfen", "Lesen"], "Alter": 42, "Kinder": [], "Partner": null } }
Der Get Request Der Austausch von JSON Dateien zwischen Serverschnittstellen und dem Client gestaltet sich, in Python, dank einfach zu bedienender Packages, recht simpel. Wir verwenden dafür das requests Package.
import requests
Um den Umgang mit dem requests Package kennen zu lernen, bieten sich Dummy APIs an, die man zum testen ansteuern kann. Eine solche Dummy API ist zum Beispiel reqres, zu finden unter https://reqres.in. Hier der Code um eine erste Abfrage von einer reqres API zu machen:
host = "https://reqres.in" try: #get content response_get = requests.get(host + "/api/users/2") content = response_get.json() print(content) response_get.raise_for_status() #from specific to more general errors except requests.exceptions.HTTPError as errh: print ("Http Error:",errh) except requests.exceptions.ConnectionError as errc: print ("Error Connecting:",errc) except requests.exceptions.Timeout as errt: print ("Timeout Error:",errt)
Die Requests packen wir generell immer in einen try Block. Zum einen, da es vom Server abhängen kann, ob der Code terminiert. Zum anderen, da wir durch die Fehlermeldungen der except Blöcke genauer beobachten können wo genau es hängt, falls etwas schief geht. Die except Blöcke für potentielle Fehler baut man in der Regel so, dass spezifische Fehler zuerst berücksichtigt werden können und folgende Blöcke zunehmend umfassendere Fehler überprüfen. Die Anfrage selbst ist simpel, wir starten mit einem einfachen get Request. Hierfür müssen wir lediglich die URL der API angeben und diese gibt uns zurück was immer sie will. Die Antwort des Servers ist allerdings kein reines JSON. Wir müssen aus dem response Objekt noch, mit Hilfe des .json() Befehls, die JSON extrahieren.Und so schnell haben wir auch schon unser erstes JSON Objekt. Der Post Request In einem weiteren Schritt, werden wir nun eine post Request durchführen. Auch hierfür gibt es eine API auf reqres, mit der wir das simulieren können. Post request sind sicherer als get Requests und werden daher auch öfter verwendet. Ein Gutes Beispiel dafür wäre ein post Request für ein Authentification Token. Dieser würde typischerweise über einen post Request ablaufen, bei dem man die eigenen Zugansdaten zum Server schickt und dieser bei erfolgreichem Login mit einem Zugangstoken antwortet. Im Anschluss, packt man den Token für die folgenden post oder get Requests in den Header der Anfragen und gibt dem Server so zu erkennen, dass man für die Zugriffe authorisiert ist.
host = "https://reqres.in" try: #get content response_get = requests.get(host + "/api/users/2") content = response_get.json() print(content) response_get.raise_for_status() #from specific to more general errors except requests.exceptions.HTTPError as errh: print ("Http Error:",errh) except requests.exceptions.ConnectionError as errc: print ("Error Connecting:",errc) except requests.exceptions.Timeout as errt: print ("Timeout Error:",errt)
In diesem Beispiel beginnen wir mit einem post Request. Im unterschied zum get Request, muss bei einem post Request ein JSON Objekt an den Server geschickt werden, in dem genau drin steht, was wir wollen. In unserem Fall ist das ein Authentifizierungstoken. Dafür braucht die API unser Zugansdaten, welche wir ganz oben in der JSON „param“ gespeichert haben. Bei unserer post Request schicken wir diese nun mit, und sagen dazu noch, dass es sich um eine JSON handelt: json = param. Zurück bekommen wir dann folgendes JSON:
{'token': 'QpwL5tke4Pnpja7X4'}
Mit dem darin enthaltenen Token, können wir nun weiter arbeiten. Wir definieren einen Header, in den wir das Token stecken und schicken diesen bei unserem get Request mit an den Server. Die API simuliert nun eine kleine Verzögerung bis wir unsere Antwort bekommen (Wow, diese Immersion!) und spuckt uns dann die gewünschten Daten als JSON aus. Tatsächlich lässt sich dieses Szenario nur bedingt gut mit den Kostenlosen APIs von reques testen, da der get Request eigentlich keine Authorisierung benötigt. Unser header, inklusive Token wird vom Server komplett ignoriert, daher packen wir ihn einfach mit rein und tun einfach so als wäre er notwendig. Eine echte Abfrage könnte durchaus aussehen wie unser Beispiel, viele APIs arbeiten allerdings ausschließlich mit post Requests. Aber auch das sollte ja nach diesem kleinen Tutorial kein Problem mehr sein :).
Das könnte Dich auch interessieren
Ein Tag als Praktikant im Home Office Teil 2
Ein Praktikant im Home-Office. Vor zwei Monaten hätte das sicher niemand für möglich gehalten. Das Ganze wurde durch den Ausbruch des Coronavirus SARS-CoV-2 ...
In 4 Schritten zum erfolgreichen Projekt
Viele große Projekte starten mit einer einfachen Idee. Die Idee wird auf ihre Einzigartigkeit und Umsetzbarkeit geprüft und eventuell umgesetzt. Was ist bei d...
Ein Blick hinter die Kulissen der Internet Halunken
Die Internet Halunken- Habt ihr euch eigentlich gefragt, wieso wir uns eigentlich Internet Halunken nennen? Ja ? Vor einiger Zeit haben wir, die Media Favoriten...