Was sagt ein HTTP-Statuscode?
Ein HTTP-Statuscode ist eine dreistellige Zahl, mit der ein Server meldet, wie eine Anfrage ausgegangen ist: erledigt, falsch gestellt oder selbst gescheitert. Wer den richtigen Code wählt und den Fehler im Body erklärt, spart anderen Entwickelnden Stunden der Suche.
Stellen Sie sich eine Bibliotheks-App vor, die nur "Fehler" anzeigt. Niemand weiß, ob das Buch fehlt, das Passwort falsch ist oder der Server brennt.
Am Ende dieser Lektion
Notiz
Ich kann den passenden Statuscode wählen und einen Fehler klar melden.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Statuscode | eine Zahl, die das Ergebnis einer Anfrage nennt | 404 |
| 2xx | Codes für Erfolg | 201 |
| 4xx | Codes für einen Fehler der Anfrage | 400 |
| 5xx | Codes für einen Fehler des Servers | 500 |
| Fehler-Body | der Text in der Antwort, der den Fehler erklärt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die erste Ziffer nennt, wer scheiterte
2xx heißt: Es hat geklappt. 4xx heißt: Die Anfrage war falsch, der Fehler liegt beim Absender. 5xx heißt: Der Server ist gescheitert, der Fehler liegt bei ihm.
Diese Ziffer entscheidet, was ein Programm tut. Bei 4xx hat Wiederholen keinen Sinn, bevor die Anfrage geändert ist. Bei 5xx kann es später klappen.
Ein Beispiel: die häufigen Codes
| Code | Name | Wann |
|---|---|---|
| 200 | OK | Gelesen oder geändert, die Antwort hat Inhalt |
| 201 | Created | Eine neue Ressource wurde angelegt |
| 204 | No Content | Erledigt, nichts zurückzuschicken |
| 400 | Bad Request | Die Eingabe ist falsch oder unvollständig |
| 401 | Unauthorized | Wir wissen nicht, wer Sie sind |
| 403 | Forbidden | Wir wissen es, aber Sie dürfen das nicht |
| 404 | Not Found | Die Ressource oder Adresse gibt es nicht |
| 409 | Conflict | Die Anfrage kollidiert mit dem Stand, zum Beispiel eine doppelte Nummer |
| 429 | Too Many Requests | Zu viele Anfragen in kurzer Zeit |
| 500 | Internal Server Error | Der Server ist an einem eigenen Fehler gescheitert |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Im Lab sehen Sie die Codes echt
Starten Sie die Runs der Reihe nach. Jeder holt oder sendet etwas und zeigt den Statuscode. Bei den Fehlern steht vor dem Code ein JSON-Objekt, das die Datenbank oder die API schreibt. Seine Meldung ist englisch.
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.
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.
Eine Tabelle fragen, die es nicht gibt
curl -s -w "\n%{http_code}\n" "http://api:3000/zeitschriften"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 Buch ohne Titel senden
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"fach":"Test","jahr":2024}' "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.
Eine Nummer doppelt vergeben
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"id":1,"titel":"Noch einmal","fach":"Test","jahr":2024}' "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 verwechseln 401 und 403. Bei 401 weiß der Server nicht, wer anfragt, die Person muss sich anmelden. Bei 403 kennt er sie, aber sie darf das nicht. Eine neue Anmeldung hilft bei 403 nicht.
Ein guter Fehler-Body sagt, was zu ändern ist
Der Code allein reicht nicht. Der Body erklärt den Fehler. Er braucht einen festen Namen für Programme, einen Satz für Menschen und, wenn es passt, das betroffene Feld.
Er zeigt nie Interna: keine SQL-Texte, keine Dateipfade, keine Stapelspur. Wer sie sieht, lernt, wie der Dienst gebaut ist.
Ein Beispiel: schlechter und guter Fehler-Body
| Schlecht | Gut | Warum |
|---|---|---|
| Fehler | {"fehler": "ungueltige_eingabe", "feld": "jahr", "meldung": "Das Jahr muss eine ganze Zahl sein."} | Name, Feld und Satz |
| ERROR: null value in column "titel" of relation "buecher" | {"fehler": "pflichtfeld", "feld": "titel", "meldung": "Der Titel fehlt."} | Keine Interna |
| Es ist etwas schiefgelaufen. | {"fehler": "nicht_gefunden", "meldung": "Das Buch 999 gibt es nicht."} | Sagt, was fehlt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Einen Fehler-Body bauen
import json
def fehler_body(name, feld, meldung):
return json.dumps({"fehler": name, "feld": feld, "meldung": meldung})
print(fehler_body("ungueltige_eingabe", "jahr", "Das Jahr muss eine ganze Zahl sein."))
# Ändern Sie das Feld und die Meldung für ein fehlendes Fach.