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

Zeilen über HTTP lesen und schreiben

Nach dieser Lektion: Ich kann Zeilen über HTTP lesen und schreiben.

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

Die App, die die Datenbank nie sieht

Eine Helpdesk-App auf dem Handy zeigt offene Meldungen. Sie verbindet sich nicht mit der Datenbank.

Sie schickt eine Webanfrage an einen kleinen Server. Der Server führt die Abfrage aus und schickt die Zeilen zurück.

Dieser Server ist eine Web-API. Fast jede App, die Sie nutzen, spricht so mit ihren Daten.

Am Ende dieser Lektion

Notiz

Ich kann Zeilen über HTTP lesen und schreiben.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
APIein Weg, auf dem ein Programm ein anderes um Daten bittet
Endpunktdie Webadresse einer Tabelle oder Aktion/meldungen
HTTP-Methodedas Verb einer Anfrage: lesen, hinzufügen, ändern oder entfernenGET
JSONText, der Zeilen als Listen und Name-Wert-Paare schreibt
Statuscodeeine Zahl, die sagt, wie eine Anfrage ausging404
Filterein Test in der Adresse, der die Zeilen auswähltstatus=eq.offen

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

Eine API stellt eine Tabelle ins Web

In diesem Lab macht ein Werkzeug namens PostgREST aus jeder Tabelle eine Webadresse. /meldungen ist die Tabelle meldungen.

Sie schicken eine Anfrage mit curl. Der Server antwortet mit Zeilen als JSON: eine Liste in eckigen Klammern, jede Zeile in geschweiften.

Legen Sie zuerst mit psql, dem Client der Datenbank, eine Helpdesk-Tabelle an. Starten Sie die Runs der Reihe nach.

psql das Passwort geben

Befehl
export PGPASSWORD=shop

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Von vorn beginnen

Befehl
psql -h db -U shop -c "drop table if exists meldungen"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tabelle meldungen anlegen

Befehl
psql -h db -U shop -c "create table meldungen (id serial primary key, titel text not null, status text not null default 'offen', prioritaet int not null)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Vier Meldungen eintragen

Befehl
psql -h db -U shop -c "insert into meldungen (titel, status, prioritaet) values ('Drucker klemmt', 'offen', 2), ('Kein WLAN in Raum 4', 'offen', 3), ('Passwort erneuern', 'geschlossen', 1), ('Notebook startet nicht', 'offen', 3)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der API sagen, dass sie neu schaut

Befehl
psql -h db -U shop -c "notify pgrst, 'reload schema'"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die ganze Tabelle lesen

Befehl
curl -s -w "\n" "http://api:3000/meldungen?order=id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Adresse sagt, welche Zeilen Sie wollen

Alles nach dem ? ist ein Filter, wie ein WHERE. status=eq.offen heißt: status ist gleich offen. prioritaet=gte.3 heißt: Priorität 3 oder mehr.

select=id,titel wählt Spalten. order=prioritaet.desc sortiert. limit=2 kürzt die Liste. Verbinden Sie sie mit &.

Setzen Sie die ganze Adresse in doppelte Anführungszeichen, sonst liest die Shell das &.

Nur die offenen Meldungen

Befehl
curl -s -w "\n" "http://api:3000/meldungen?status=eq.offen&order=id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zwei Spalten, nur dringende Meldungen

Befehl
curl -s -w "\n" "http://api:3000/meldungen?prioritaet=gte.3&select=id,titel&order=id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die zwei dringendsten

Befehl
curl -s -w "\n" "http://api:3000/meldungen?order=prioritaet.desc,id&limit=2"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Beispiel: SQL und HTTP nebeneinander

SQLHTTP-MethodeAdresse und Inhalt
SELECT ... WHEREGET/meldungen?status=eq.offen
INSERT INTOPOST/meldungen, mit der neuen Zeile als JSON
UPDATE ... WHEREPATCH/meldungen?id=eq.1, mit den Änderungen als JSON
DELETE ... WHEREDELETE/meldungen?id=eq.3

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

POST, PATCH und DELETE ändern Daten

Um eine Zeile hinzuzufügen, schicken Sie sie per POST als JSON. Um Zeilen zu ändern, schicken Sie die Änderungen per PATCH. Um Zeilen zu entfernen, schicken Sie DELETE.

Wie in SQL entscheidet der Filter in der Adresse, welche Zeilen betroffen sind. Ein PATCH oder DELETE ohne Filter träfe jede Zeile.

Der Server sagt mit einem Statuscode, wie es ging.

Eine Meldung eintragen und zurückbekommen

Befehl
curl -s -w "\n" -X POST -H "Content-Type: application/json" -H "Prefer: return=representation" -d '{"titel":"Monitor flackert","prioritaet":2}' "http://api:3000/meldungen"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Meldung 1 schließen

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X PATCH -H "Content-Type: application/json" -d '{"status":"geschlossen"}' "http://api:3000/meldungen?id=eq.1"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Meldung ändern, die es nicht gibt

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X PATCH -H "Content-Type: application/json" -d '{"status":"geschlossen"}' "http://api:3000/meldungen?id=eq.99"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Meldung 3 löschen

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X DELETE "http://api:3000/meldungen?id=eq.3"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Zeile, die die Datenbank ablehnt

Befehl
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"prioritaet":1}' "http://api:3000/meldungen"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tabelle noch einmal lesen

Befehl
curl -s -w "\n" "http://api:3000/meldungen?order=id"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, ein Code 2xx heiße: Die Anfrage hat getan, was ich wollte. Der Code sagt nur, dass der Server sie verstanden und angenommen hat. Ein PATCH, dessen Filter nichts trifft, antwortet trotzdem 204. Lesen Sie die Tabelle noch einmal, um es zu prüfen.

Ein Beispiel: Statuscodes lesen

CodeBedeutungIn dieser Lektion
200Hier sind die ZeilenBeim Lesen der Tabelle
201Eine neue Zeile wurde angelegtJeder erfolgreiche POST; der Run gibt ihn nicht aus
204Erledigt, nichts zurückzuschickenDer PATCH und der DELETE
400Die Anfrage war falsch oder brach eine RegelDie Meldung ohne Titel
404Keine solche Tabelle oder AdresseDie Anfrage nach /nichts

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

Eine Tabelle fragen, die es nicht gibt

Befehl
curl -s -w "\n%{http_code}\n" "http://api:3000/nichts"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ü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.