1. Was ist eine REST-API? (Die Kellner-Analogie)
Eine API (Application Programming Interface) ist eine Schnittstelle, über die zwei Computer oder Programme übers Internet miteinander kommunizieren. Nahezu jede moderne Web-App (wie Wetterberichte, Börsenkurse, Spotify oder Google Maps) stellt ihre Daten über REST-APIs im JSON-Format bereit.
- Der Gast (Client / Dein Python-Skript): Du sitzt am Tisch und möchtest ein bestimmtes Gericht (Daten) bestellen.
- Die Speisekarte (API-Dokumentation / Endpunkte): Zeigt dir, welche Gerichte (URLs & Parameter wie
/weather?city=Wien) du bestellen kannst. - Der Kellner (Die REST-API): Nimmt deine Bestellung (**HTTP Request**) entgegen, eilt in die Küche und bringt dir das fertige Essen (**HTTP Response**) zurück.
- Die Küche & Vorratskammer (Web-Server & Datenbank): Verarbeitet die Rohzutaten und bereitet das Essen zu.
Der typische Ablauf eines API-Aufrufs
2. Die wichtigsten HTTP-Statuscodes
Jede API-Antwort enthält einen 3-stelligen numerischen Statuscode, der signalisiert, ob die Anfrage geklappt hat:
| Code | Bedeutung | Typischer Grund |
|---|---|---|
| 200 OK | Erfolg | Die Daten wurden erfolgreich gefunden und als JSON zurückgegeben. |
| 400 Bad Request | Ungültige Anfrage | Falsche Parameter übergeben (z.B. ungültiges Datumsformat). |
| 404 Not Found | Nicht gefunden | Stadt, Benutzer oder URL-Endpunkt existiert nicht. |
| 500 Internal Server Error | Serverfehler | Unerwarteter Fehler oder Absturz auf dem Zielserver. |
3. JSON-Parsing & Defensive Fehlerbehandlung
Im Web empfangen wir Daten fast immer als rohen Textstring. Mit json.loads() (load string) parsen wir ihn in Python:
import json roher_json_text = ''' { "name": "Hamburg", "main": {"temp": 17.5, "humidity": 82}, "weather": [{"description": "Leichter Nieselregen"}] } ''' try: daten = json.loads(roher_json_text) # Defensiver Zugriff auf verschachtelte Werte: stadt = daten["name"] temperatur = float(daten["main"]["temp"]) beschreibung = daten["weather"][0]["description"] except json.JSONDecodeError as e: print(f"Kaputter JSON-String: {e}") except (KeyError, IndexError) as e: print(f"Unerwartete Datenstruktur / Fehlendes Feld: {e}")
4. 🎯 Deine Aufgaben in aufgabe.py
Öffne die Datei aufgabe.py und vervollständige die Web-API-Tools:
💡 Lösungshinweise (Aufklappen bei Bedarf)
🔍 Tipp zu parse_wetter_antwort
try: data = json.loads(json_text) return { "stadt": data["name"], "temperatur": float(data["main"]["temp"]), "luftfeuchtigkeit": int(data["main"]["humidity"]), "wetterlage": data["weather"][0]["description"] } except Exception as e: raise ValueError(f"Ungültige Wetterdaten: {e}")
🔍 Tipp zum Ticker-String
items = [f"[{n['ressort']}] {n['titel']}" for n in nachrichten] return " +++ ".join(items) + " +++"
5. 🧪 Lösung überprüfen
Führe im Terminal im Ordner 22_web_apis_und_json_feeds folgenden Befehl aus:
python3 test_aufgabe.py
🧠 Diagnostischer Selbst-Check
Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.