Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Daten über HTTP: JSON, GET und POST

Nach dieser Lektion: Ich kann Daten über HTTP mit GET lesen und mit POST anlegen.

Lektion, 45 Min.4 BefehlePostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

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

BegriffWas er bedeutetBeispiel
APIeine Adresse, die ein Programm nach Daten fragt
JSONein Textformat für Daten{"name": "Brezel"}
GETeine Anfrage, die Daten liest
POSTeine Anfrage, die Daten neu anlegt
Schlüsselder Name eines Werts in JSONpreis_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

MethodeWas sie tutBeispiel im Kiosk
GETDaten lesenDie Preisliste anzeigen
POSTEtwas Neues anlegenEin neues Produkt eintragen
PATCHEtwas ändernEinen Preis ändern
DELETEEtwas löschenEin 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 JSONIn PythonArt
[1, 2, 3][1, 2, 3]Liste
{"name": "Brezel"}{"name": "Brezel"}Wörterbuch (JSON: Objekt)
120120ganze Zahl
trueTrueWahrheitswert

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

JSON-Text in Python lesen

Code: python
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

Befehl
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

Befehl
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

Befehl
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/produkte

Hier 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

Befehl
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?

Über dieses Lab und seinen Quellcode: PostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.