Eine REST-API ansprechen mit requests

Mit der Bibliothek requests sprichst du REST-APIs in Python ganz einfach an. In diesem Beitrag lernst du GET, POST, JSON, Header und eine saubere Fehlerbehandlung.

Teilen
Eine REST-API ansprechen mit requests

Heutzutage bieten unzählige Dienste eine REST-API an, über die du Daten abrufen oder senden kannst, vom Wetterdienst bis zur Übersetzungs-API. In Python ist die Bibliothek requests das Standardwerkzeug dafür. Sie ist einfach zu bedienen und nimmt dir viel Arbeit ab. In diesem Beitrag lernst du, wie du Daten abrufst, sendest, mit JSON arbeitest und sauber mit Fehlern umgehst.

Was ist eine REST-API?

Eine REST-API ist eine Schnittstelle, über die Programme per HTTP miteinander kommunizieren. Du sprichst eine URL (den sogenannten Endpunkt) mit einer bestimmten Methode an. Die wichtigsten Methoden sind:

  • GET ruft Daten ab
  • POST sendet neue Daten
  • PUT aktualisiert vorhandene Daten
  • DELETE löscht Daten

Die Antwort kommt meist im Format JSON zurück, das sich in Python bequem in Dictionaries und Listen umwandeln lässt.

Daten abrufen mit GET

Der häufigste Fall ist das Abrufen von Daten. Dafür nutzt du requests.get. Wenn die API JSON zurückliefert, wandelst du die Antwort direkt mit .json() in Python-Objekte um.

import requests

url = "https://api.github.com/users/python"
antwort = requests.get(url, timeout=10)

daten = antwort.json()
print(daten["name"])         # Python
print(daten["public_repos"]) # Anzahl der Repositories

Aus dem JSON-Objekt greifst du wie bei einem Dictionary über die Schlüssel auf die einzelnen Werte zu.

Query-Parameter übergeben

Viele APIs erwarten Parameter, etwa eine Suchanfrage oder ein Limit. Statt sie umständlich an die URL zu hängen, übergibst du sie als Dictionary über den Parameter params. requests baut die URL dann korrekt zusammen.

import requests

url = "https://api.example.com/suche"
parameter = {"q": "python", "limit": 5}

antwort = requests.get(url, params=parameter)
print(antwort.url)  # https://api.example.com/suche?q=python&limit=5

Das ist nicht nur bequemer, sondern auch sicherer, weil Sonderzeichen automatisch korrekt kodiert werden.

Daten senden mit POST

Um neue Daten an eine API zu senden, verwendest du requests.post. Mit dem Argument json übergibst du ein Dictionary, das automatisch in JSON umgewandelt und mit dem passenden Header verschickt wird.

import requests

url = "https://api.example.com/nutzer"
neuer_nutzer = {"name": "Anna", "rolle": "Entwicklerin"}

antwort = requests.post(url, json=neuer_nutzer)
print(antwort.status_code)  # z.B. 201 (Created)
print(antwort.json())

Der Statuscode 201 bedeutet, dass die Ressource erfolgreich angelegt wurde. So bestätigt dir die API, dass dein POST funktioniert hat.

Header und Authentifizierung

Viele APIs verlangen einen API-Schlüssel oder ein Token. Diesen übergibst du meist im Header. Mit dem Parameter headers ist das schnell erledigt.

import requests

url = "https://api.example.com/geschuetzt"
headers = {
    "Authorization": "Bearer DEIN_TOKEN",
    "Accept": "application/json"
}

antwort = requests.get(url, headers=headers)
print(antwort.status_code)

Wichtig: Schreibe geheime Schlüssel nie direkt in den Code, der öffentlich wird. Lade sie stattdessen aus einer Umgebungsvariable oder einer Konfigurationsdatei.

Fehler sauber behandeln

Im echten Leben geht nicht immer alles gut. Server sind nicht erreichbar oder antworten mit einem Fehlercode. Mit raise_for_status und einem try-Block fängst du solche Fälle sauber ab.

import requests

try:
    antwort = requests.get("https://api.example.com/daten", timeout=5)
    antwort.raise_for_status()  # löst bei 4xx/5xx eine Ausnahme aus
    daten = antwort.json()
    print(daten)
except requests.exceptions.Timeout:
    print("Die Anfrage hat zu lange gedauert.")
except requests.exceptions.RequestException as fehler:
    print("Ein Fehler ist aufgetreten:", fehler)

So stürzt dein Programm nicht ab, sondern reagiert kontrolliert auf Probleme. Setze außerdem immer ein timeout, damit deine Anfrage nicht ewig hängt.

Fazit

Mit requests sprichst du REST-APIs in wenigen Zeilen an. Du hast gelernt, wie du mit GET Daten abrufst, mit POST Daten sendest, Query-Parameter und Header übergibst und JSON verarbeitest. Genauso wichtig ist die saubere Fehlerbehandlung mit raise_for_status und try/except. Mit diesem Wissen kannst du nun viele spannende Dienste in deine eigenen Projekte einbinden. Such dir am besten eine kostenlose, öffentliche API und probiere die Beispiele direkt aus.