Wie holt eine App ihre Daten?
Eine Web-API ist eine Adresse, bei der ein Programm Daten abholt oder abgibt. Die Daten kommen meist als JSON, einem Text mit klarem Aufbau.
Wenn deine Wetter-App die Temperatur anzeigt, hat sie so eine Adresse gefragt. Heute liest und schreibst du Daten über eine API.
Am Ende dieser Lektion
Notiz
Ich kann Daten über HTTP mit GET lesen und mit POST anlegen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| API | eine Adresse, die ein Programm nach Daten fragt | |
| JSON | ein Textformat für Daten | {"name": "Brezel"} |
| GET | eine Anfrage, die Daten liest | |
| POST | eine Anfrage, die Daten neu anlegt | |
| Schlüssel | der Name eines Werts in JSON | preis_in_cent |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Welche Anfragen gibt es?
Eine Anfrage hat eine Methode. Sie sagt, was der Server tun soll. Eine Adresse allein sagt nur, wo.
Vier Methoden decken fast alles ab: lesen, anlegen, ändern und löschen. Heute brauchst du die ersten beiden.
Beispiel: Methoden und ihr Zweck
| Methode | Was sie tut | Beispiel im Kiosk |
|---|---|---|
| GET | Daten lesen | Die Preisliste anzeigen |
| POST | Etwas Neues anlegen | Ein neues Produkt eintragen |
| PATCH | Etwas ändern | Einen Preis ändern |
| DELETE | Etwas löschen | Ein Produkt austragen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Wie sieht JSON aus?
JSON schreibt Daten als Text. Eine Liste steht in eckigen Klammern, ein Objekt in geschweiften. Ein Objekt hat Paare aus Schlüssel und Wert.
Schlüssel stehen immer in doppelten Anführungszeichen. Texte auch, Zahlen nicht. Python kennt dieselbe Form: Liste und Wörterbuch.
Beispiel: JSON und Python nebeneinander
| In JSON | In Python | Art |
|---|---|---|
| [1, 2, 3] | [1, 2, 3] | Liste |
| {"name": "Brezel"} | {"name": "Brezel"} | Wörterbuch (JSON: Objekt) |
| 120 | 120 | ganze Zahl |
| true | True | Wahrheitswert |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
JSON-Text in Python lesen
import json
text = '[{"name": "Brezel", "preis_in_cent": 120}]'
produkte = json.loads(text)
print(produkte[0]["name"])
print(produkte[0]["preis_in_cent"] / 100)
# Ändere 120 zu 95 und drück noch einmal auf Ausführen.Ein häufiger Fehler
Warnung
Viele schreiben JSON mit einfachen Anführungszeichen, wie in Python möglich: {'name': 'Brezel'}. Das ist kein JSON. JSON verlangt doppelte Anführungszeichen, sonst lehnt jeder Server und jede Bibliothek den Text ab.
Bevor du anfängst
Notiz
Drück oben in der Leiste auf Lab starten und warte, bis die Maschine läuft. Die Runs brauchen die Tabelle produkte aus der ersten Lektion. Hast du sie noch nicht, mach zuerst deren Runs oder bitte deine Lehrkraft um Hilfe.
Ein Produkt mit GET lesen
curl -s -w "\n" "http://api:3000/produkte?name=eq.Brezel&select=name,preis_in_cent"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nur die Produkte unter 1,30 Euro lesen
curl -s -w "\n" "http://api:3000/produkte?preis_in_cent=lt.130&select=name,preis_in_cent"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie filtert man in der Adresse?
Nach dem Fragezeichen stehen Bedingungen. name=eq.Brezel heißt: Name gleich Brezel. preis_in_cent=lt.130 heißt: Preis kleiner als 130. select=name,preis_in_cent wählt nur diese zwei Felder.
Mehrere Bedingungen trennt das Zeichen &. Setz darum die ganze Adresse in Anführungszeichen, sonst liest die Shell sie falsch.
Wie legt man mit POST etwas an?
Bei POST schickst du die Daten mit, als JSON im Inhalt der Anfrage. Eine Kopfzeile sagt dem Server, dass es JSON ist: Content-Type: application/json.
Hat es geklappt, antwortet der Server mit 201. Das heißt: angelegt, und es gibt nichts zurückzuschicken.
Ein neues Produkt mit POST anlegen
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"name":"Laugenstange","preis_in_cent":90}' http://api:3000/produkteHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nachlesen, ob die Laugenstange da ist
curl -s -w "\n" "http://api:3000/produkte?name=eq.Laugenstange&select=name,preis_in_cent"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend: zweimal dasselbe anlegen
Drück den Run „Ein neues Produkt mit POST anlegen“ noch einmal. Schau dir den Code an.
Warum ist es diesmal kein 201? Denk an die Spalte name, die in der Tabelle nur einmal vorkommen darf. Welche Gruppe von Codes ist es?