Lernen / Cheat Sheet
HTTP Cheat Sheet für API-Tests
Was Tester von HTTP wissen müssen, auf einer Seite: welche Methoden sicher und idempotent sind, welchen Statuscode jede Situation liefern sollte, welche Header eine Assertion wert sind, die cURL-Flags für den Alltag und eine Checkliste für jede Response.
Geprüft mit HTTP-Semantik nach RFC 9110; Problem Details nach RFC 9457
Methoden
| Methode | Zweck | Sicher | Idempotent |
|---|---|---|---|
GET | Eine Ressource oder Collection lesen | Ja | Ja |
HEAD | Wie GET, nur Header | Ja | Ja |
OPTIONS | Erlaubte Methoden; CORS-Preflight | Ja | Ja |
POST | Anlegen oder eine Aktion ausführen | Nein | Nein |
PUT | Die gesamte Ressource ersetzen | Nein | Ja |
PATCH | Einzelne Felder ändern | Nein | Nicht garantiert |
DELETE | Eine Ressource entfernen | Nein | Ja |
Idempotent heißt: Wiederholt man den Request, bleibt der Server im selben Zustand. Die Response kann sich unterscheiden: Ein zweites DELETE darf 404 liefern.
Zu prüfende Statuscodes
| Code | Bedeutung | Typischer Test |
|---|---|---|
200 OK | Erfolg mit Body | GET auf eine existierende Ressource |
201 Created | Ressource angelegt | POST mit gültigen Daten; Location-Header prüfen |
204 No Content | Erfolg, leerer Body | DELETE oder PUT ohne Rückgabe |
301 / 308 | Dauerhaft verschoben | Alte URL leitet weiter; 308 behält die Methode bei |
304 Not Modified | Gecachte Kopie ist noch gültig | GET mit If-None-Match: <etag> |
400 Bad Request | Fehlerhafter Request | Ungültiges JSON, falsche Typen |
401 Unauthorized | Nicht authentifiziert | Fehlendes oder abgelaufenes Token |
403 Forbidden | Authentifiziert, aber nicht berechtigt | Zugriff auf die Ressource eines anderen Nutzers |
404 Not Found | Ressource existiert nicht | Unbekannte ID (oder Verbergen einer Ressource, die man nicht sehen darf) |
405 Method Not Allowed | Falsche Methode für diese URL | DELETE auf einen Read-only-Endpoint |
409 Conflict | Kollidiert mit dem aktuellen Zustand | Doppelte E-Mail, veraltete Version |
415 Unsupported Media Type | Body-Format nicht akzeptiert | text/plain an einen JSON-Endpoint senden |
422 Unprocessable Content | Gültiges JSON, ungültige Werte | Validierungsfehler bei Geschäftsregeln |
429 Too Many Requests | Rate Limit erreicht | Viele Requests auf einmal; Retry-After prüfen |
500 Internal Server Error | Serverfehler | Nie erwartet: immer ein Defekt |
502 / 503 / 504 | Upstream-Fehler, nicht verfügbar, Timeout | Abhängigkeit ausgefallen; Retries prüfen |
Header, die eine Prüfung wert sind
| Header | Beispiel | Warum |
|---|---|---|
Content-Type | application/json; charset=utf-8 | Antwortformat passt zum Body |
Accept | application/json | Client fordert ein Format an; 406 erwarten, wenn nicht unterstützt |
Authorization | Bearer eyJhbGciOi… | Token-Authentifizierung; fehlt sie → 401 |
Location | /api/orders/1043 | Gesetzt bei 201 Created und Redirects |
Cache-Control | no-store | Persönliche oder sensible Daten dürfen nicht gecacht werden |
ETag / If-None-Match | "a1b2c3" | Bedingtes GET → 304 |
Retry-After | 30 | Wird mit 429 oder 503 gesendet |
Set-Cookie | sid=…; HttpOnly; Secure; SameSite=Lax | Session-Cookies brauchen HttpOnly und Secure |
Access-Control-Allow-Origin | https://app.example.com | CORS: nie * bei Requests mit Credentials |
cURL
| Aufgabe | Code |
|---|---|
| Status und Header anzeigen | curl -i https://api.example.com/users/1 |
| Vollständiger Request/Response-Trace | curl -v https://api.example.com/users/1 |
| JSON per POST senden | curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
-d '{"email":"qa@example.com"}' |
| Bearer-Token | curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me |
| Basic Auth | curl -u user:pass https://api.example.com/admin |
| Redirects folgen | curl -L https://example.com/old |
| Nur der Statuscode | curl -s -o /dev/null -w '%{http_code}' https://api.example.com/health |
| In Skripten bei 4xx/5xx fehlschlagen | curl --fail-with-body https://api.example.com/health |
Unter Windows cmd ersetzen Sie die einfachen Anführungszeichen durch doppelte und escapen die inneren.
Checkliste für jede Response
| Prüfung | Beispiel |
|---|---|
| Statuscode | Genau 201, nicht „irgendein 2xx“ |
| Body-Schema | Pflichtfelder vorhanden, korrekte Typen, keine zusätzlichen sensiblen Felder |
| Werte | Zurückgegebene Eingaben stimmen; berechnete Felder (Summen, Datumswerte) sind korrekt |
| Header | Content-Type, Location, Cache-Control |
| Fehlerformat | Einheitliches Fehlerformat (z. B. RFC 9457 Problem Details) mit hilfreicher Meldung |
| Seiteneffekte | Der Datensatz existiert – oder eben nicht –, wenn Sie ihn per GET abrufen |
| Antwortzeit | Innerhalb des vereinbarten Budgets |