Was schickt eine App, wenn sie Daten bestellt?
Eine HTTP-Anfrage (HTTP steht für Hypertext Transfer Protocol) ist die Nachricht, mit der ein Browser oder eine App bei einem Server Daten bestellt. Wer Anfrage und Antwort lesen kann, versteht, was jede Web-App im Hintergrund tut und wo ein Fehler steckt.
Die Katalog-App einer Hochschulbibliothek fragt so nach den Büchern eines Fachs. Der Server schickt eine Antwort zurück, und die App zeigt sie an.
Am Ende dieser Lektion
Notiz
Ich kann eine HTTP-Anfrage und ihre Antwort lesen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| HTTP-Anfrage | die Nachricht, mit der ein Programm etwas von einem Server verlangt | |
| URL | die Webadresse einer Ressource | http://api:3000/buecher |
| Methode | das Verb einer Anfrage: was der Server tun soll | GET |
| Header | eine Zusatzangabe zu einer Nachricht, als Name und Wert | Accept: application/json |
| Statuscode | eine dreistellige Zahl, die sagt, wie die Anfrage ausging | 200 |
| Body | der Inhalt einer Nachricht, nach den Headern |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Im Lab sprechen Sie mit einer echten API
Das Lab startet zwei Dienste: eine Datenbank namens db und eine Web-API namens api. Die API macht aus jeder Tabelle eine Webadresse.
Im Terminal haben Sie psql für die Datenbank und curl für Webanfragen. Legen Sie zuerst mit psql die Tabelle buecher 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.
Die Tabelle buecher anlegen und füllen
psql -h db -U shop -c "drop table if exists buecher cascade; create table buecher (id serial primary key, titel text not null, fach text not null, jahr int not null, exemplare int not null default 1); insert into buecher (titel, fach, jahr, exemplare) values ('Algorithmen kompakt', 'Informatik', 2019, 3), ('Netze verstehen', 'Informatik', 2021, 2), ('Statistik fuer alle', 'Mathematik', 2018, 1), ('Schreiben im Studium', 'Sprache', 2020, 4); 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.
Eine Anfrage hat vier Teile
Die erste Zeile nennt die Methode, den Pfad und die Version von HTTP. Der Pfad ist der Teil der Adresse nach dem Rechnernamen.
Danach folgen die Header, je eine Zeile aus Name, Doppelpunkt und Wert. Eine leere Zeile beendet die Header. Alles danach ist der Body. Bei einer reinen Leseanfrage ist er leer.
Ein Beispiel: eine Anfrage, Zeile für Zeile
GET /buecher?id=eq.1 HTTP/1.1
Host: api:3000
Accept: application/json
# Zeile 1: Methode GET, Pfad /buecher?id=eq.1, Version HTTP/1.1
# Zeile 2 und 3: zwei Header
# Dann eine leere Zeile, und danach kein BodyDieselbe Anfrage mit curl schicken
curl -s -w "\n" "http://api:3000/buecher?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 Antwort hat Statuszeile, Header und Body
Die Antwort beginnt mit dem Statuscode, zum Beispiel 200. Er sagt in einer Zahl, wie die Anfrage ausging. Danach folgen wieder Header und der Body.
Der Header Content-Type nennt das Format des Bodys. Bei dieser API ist es JSON. Der Body ist der eigentliche Inhalt: hier die Zeilen der Tabelle.
Ein Beispiel: eine Antwort lesen
| Teil der Antwort | Im Beispiel | Bedeutung |
|---|---|---|
| Statuszeile | HTTP/1.1 200 OK | Die Anfrage hat geklappt |
| Header | Content-Type: application/json | Der Body ist JSON-Text |
| Leere Zeile | (nichts) | Hier endet der Header-Teil |
| Body | [{"id":1,"titel":"Algorithmen kompakt", ...}] | Eine Liste mit einem Buch |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Nur den Statuscode anzeigen
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/buecher"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 das Format des Bodys anzeigen
curl -s -o /dev/null -w "%{content_type}\n" "http://api:3000/buecher"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 200 heiße: Die gesuchte Zeile ist da. Er sagt nur, dass die Anfrage geklappt hat. Eine Suche ohne Treffer antwortet auch mit 200, und der Body ist eine leere Liste. Lesen Sie darum immer auch den Body.
Ein Buch suchen, das es nicht gibt
curl -s -w "\n%{http_code}\n" "http://api:3000/buecher?id=eq.999"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.