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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| API | ein Weg, auf dem ein Programm ein anderes um Daten bittet | |
| Endpunkt | die Webadresse einer Tabelle oder Aktion | /meldungen |
| HTTP-Methode | das Verb einer Anfrage: lesen, hinzufügen, ändern oder entfernen | GET |
| JSON | Text, der Zeilen als Listen und Name-Wert-Paare schreibt | |
| Statuscode | eine Zahl, die sagt, wie eine Anfrage ausging | 404 |
| Filter | ein Test in der Adresse, der die Zeilen auswählt | status=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
export PGPASSWORD=shopHier 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
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
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
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
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
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
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
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
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
| SQL | HTTP-Methode | Adresse und Inhalt |
|---|---|---|
| SELECT ... WHERE | GET | /meldungen?status=eq.offen |
| INSERT INTO | POST | /meldungen, mit der neuen Zeile als JSON |
| UPDATE ... WHERE | PATCH | /meldungen?id=eq.1, mit den Änderungen als JSON |
| DELETE ... WHERE | DELETE | /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
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
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
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
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
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
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
| Code | Bedeutung | In dieser Lektion |
|---|---|---|
| 200 | Hier sind die Zeilen | Beim Lesen der Tabelle |
| 201 | Eine neue Zeile wurde angelegt | Jeder erfolgreiche POST; der Run gibt ihn nicht aus |
| 204 | Erledigt, nichts zurückzuschicken | Der PATCH und der DELETE |
| 400 | Die Anfrage war falsch oder brach eine Regel | Die Meldung ohne Titel |
| 404 | Keine solche Tabelle oder Adresse | Die Anfrage nach /nichts |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Tabelle fragen, die es nicht gibt
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.