HTTP-Requests in Python: Externe APIs mit requests ansprechen
Wie du mit der requests-Bibliothek externe Web-APIs aufrufst, JSON verarbeitest und Fehler sauber behandelst – ein praxisnaher Einstieg.
Wer eine eigene Anwendung schreibt, kommt früher oder später an den Punkt, an dem die eigenen vier Wände des Programms nicht mehr ausreichen. Wetterdaten, Wechselkurse, Geokoordinaten oder die Inhalte eines anderen Dienstes liegen irgendwo im Netz – und genau dort kommen Web-APIs ins Spiel. In diesem Beitrag schauen wir uns an, wie du mit Python und der Bibliothek requests solche Schnittstellen ansprichst.
Was ist eine API – und warum requests?
Eine API (Application Programming Interface) ist eine vereinbarte Schnittstelle, über die zwei Programme miteinander reden. Bei Web-APIs läuft diese Kommunikation über HTTP: Du schickst eine Anfrage an eine URL und bekommst eine Antwort zurück, in den allermeisten Fällen im JSON-Format. Theoretisch ginge das auch mit der Standardbibliothek urllib, aber requests ist deutlich angenehmer zu lesen und zu schreiben. Wenn du dir vorher die englischsprachige Schritt-für-Schritt-Anleitung Python API Requests – A Beginner's Guide auf pykit.org anschaust, hast du eine gute Grundlage, auf der dieser Artikel aufbaut. Dort wird der grundsätzliche Request-Response-Ablauf sehr anschaulich erklärt.
Installation und erster Aufruf
Die Bibliothek installierst du am besten in einer virtuellen Umgebung. Falls du damit noch nicht vertraut bist, lohnt ein Blick auf unseren Beitrag zu venv und pip. Anschließend genügt:
pip install requestsEin einfacher GET-Aufruf sieht dann so aus:
import requests
antwort = requests.get("https://api.github.com/users/python")
print(antwort.status_code)
print(antwort.json()["name"])Mit antwort.status_code prüfst du, ob der Aufruf erfolgreich war (Code 200), und antwort.json() wandelt die JSON-Antwort direkt in ein Python-Dictionary um. Das ist der ganze Zauber.
Parameter, Header und Authentifizierung
Viele APIs erwarten zusätzliche Angaben. Suchparameter übergibst du sauber über das params-Argument, statt sie umständlich an die URL zu hängen:
params = {"q": "python", "sort": "stars"}
r = requests.get("https://api.github.com/search/repositories", params=params)Benötigt die Schnittstelle einen API-Schlüssel, wandert dieser meist in einen HTTP-Header. Solche Geheimnisse gehören nicht in den Quellcode, sondern in Umgebungsvariablen – wie das geht, beschreiben wir in unserem Node.js-Beitrag, das Prinzip lässt sich eins zu eins auf Python übertragen.
Fehler sauber behandeln
Netzwerkaufrufe können scheitern: Der Server antwortet nicht, der Schlüssel ist abgelaufen oder die Ressource existiert nicht. Verlasse dich deshalb nie blind auf eine Antwort:
try:
r = requests.get(url, timeout=5)
r.raise_for_status()
daten = r.json()
except requests.exceptions.RequestException as fehler:
print(f"Aufruf fehlgeschlagen: {fehler}")Das timeout verhindert, dass dein Programm ewig hängt, und raise_for_status() wirft bei Fehlercodes wie 404 oder 500 automatisch eine Ausnahme.
Vom Konsumieren zum Bereitstellen
Wenn du verstanden hast, wie man fremde APIs anspricht, ist der nächste logische Schritt, selbst eine zu bauen. Genau das haben wir im Beitrag zu REST-APIs mit Express gezeigt – dort entsteht die Gegenseite dessen, was wir hier konsumieren. Beide Perspektiven zusammen ergeben ein rundes Bild davon, wie moderne Anwendungen Daten austauschen.
Fazit
Mit requests sind HTTP-Aufrufe in Python in wenigen Zeilen erledigt. Wichtig sind drei Dinge: Parameter und Header sauber trennen, Geheimnisse aus dem Code heraushalten und Fehler bewusst abfangen. Wer diese Grundlagen verinnerlicht, kann praktisch jeden Webdienst in die eigene Anwendung einbinden. Für den konzeptionellen Einstieg empfehle ich noch einmal die verlinkte Anleitung auf pykit.org – danach steht deinem ersten eigenen API-Projekt nichts mehr im Weg.