API-Test- und Debugging-Leitfaden: Von cURL bis Online-Tools

Entwickler-Tools

HTTP-Anfragemethoden

Methode Verwendung Idempotent Sicher
GET Ressource abrufen
POST Ressource erstellen
PUT Vollständige Aktualisierung
PATCH Teilaktualisierung
DELETE Ressource löschen
HEAD Header abrufen
OPTIONS CORS-Preflight

Häufige Anfrage-Header

Header Beschreibung Beispiel
Content-Type Format des Anfragekörpers application/json
Accept Erwartetes Antwortformat application/json
Authorization Authentifizierungsinformation Bearer token...
User-Agent Client-Kennung Mozilla/5.0...
Cookie Cookie session=abc123
X-Request-ID Anfrageverfolgungs-ID UUID

Häufige Content-Type-Werte

Wert Verwendung
application/json JSON-Daten
application/x-www-form-urlencoded Formulardaten
multipart/form-data Datei-Upload
text/plain Reintext
text/html HTML

Authentifizierungsmethoden

1. Bearer Token (am häufigsten)

# cURL
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
  https://api.example.com/users

# JavaScript
fetch('https://api.example.com/users', {
  headers: {
    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9...',
  },
});

2. Basic Auth

# cURL (automatische Kodierung)
curl -u username:password https://api.example.com/users

# Manuelle Kodierung
# Base64("username:password") = "dXNlcm5hbWU6cGFzc3dvcmQ="
curl -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  https://api.example.com/users

3. API Key

# Methode 1: Header
curl -H "X-API-Key: your-api-key" \
  https://api.example.com/users

# Methode 2: Query-Parameter
curl "https://api.example.com/users?api_key=your-api-key"

cURL-Befehl im Detail

Einfache GET-Anfrage

# Einfachstes GET
curl https://api.example.com/users

# Antwort-Header anzeigen
curl -i https://api.example.com/users

# Nur Antwort-Header anzeigen
curl -I https://api.example.com/users

# Weiterleitungen folgen
curl -L https://example.com/redirect

POST-Anfrage

# JSON-Daten
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "Alice", "email": "alice@example.com"}'

# Formulardaten
curl -X POST https://api.example.com/users \
  -d "name=Alice&email=alice@example.com"

# Datei-Upload
curl -X POST https://api.example.com/upload \
  -F "file=@photo.jpg" \
  -F "description=My photo"

Erweiterte Optionen

# Timeout-Einstellung
curl --connect-timeout 5 --max-time 30 https://api.example.com

# In Datei speichern
curl -o response.json https://api.example.com/users

# Stiller Modus (kein Fortschrittsbalken)
curl -s https://api.example.com/users

# Ausführliche Ausgabe (zum Debuggen)
curl -v https://api.example.com/users

# SSL-Zertifikatsprüfung ignorieren (nur Entwicklungsumgebung)
curl -k https://self-signed.example.com

# Proxy
curl -x http://proxy:8080 https://api.example.com

# Cookie
curl -b "session=abc123" https://api.example.com/users

# Cookie speichern und senden
curl -c cookies.txt -b cookies.txt https://api.example.com/users

Häufige HTTP-Statuscodes

Statuscode Bedeutung Häufige Ursache
200 OK Erfolg
201 Created POST erfolgreich erstellt
204 No Content DELETE erfolgreich
301 Moved Permanently Permanente Weiterleitung
304 Not Modified Cache-Treffer
400 Bad Request Falsche Parameter
401 Unauthorized Nicht authentifiziert
403 Forbidden Keine Berechtigung
404 Not Found Ressource existiert nicht
409 Conflict Ressourcenkonflikt
422 Unprocessable Entity Validierung fehlgeschlagen
429 Too Many Requests Ratenbegrenzung
500 Internal Server Error Serverfehler
502 Bad Gateway Upstream-Dienst nicht verfügbar
503 Service Unavailable Dienst überlastet

ToolsKu zum API-Test verwenden

cURL zu Code konvertieren

  1. cURL-zu-Code-Tool öffnen
  2. cURL-Befehl einfügen
  3. Zielsprache auswählen (JavaScript/Python/Go/Java usw.)
  4. Generierten Code kopieren

Beispiel

# cURL-Eingabe
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer token123" \
  -d '{"name": "Alice"}'

Konvertiert zu JavaScript:

const response = await fetch('https://api.example.com/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer token123',
  },
  body: JSON.stringify({ name: 'Alice' }),
});
const data = await response.json();

API-Debugging-Techniken

1. Vollständige Anfrage/Antwort anzeigen

# -v zeigt detaillierte Informationen
curl -v https://api.example.com/users

# Ausgabe:
> GET /users HTTP/1.1          ← Anfragezeile
> Host: api.example.com        ← Anfrage-Header
> Authorization: Bearer ...
>
< HTTP/1.1 200 OK              ← Antwortzeile
< Content-Type: application/json ← Antwort-Header
< X-RateLimit-Remaining: 99
<
[{"id": 1, "name": "Alice"}]   ← Antwortkörper

2. JSON-Antwort formatieren

# Mit jq formatieren
curl -s https://api.example.com/users | jq

# Mit python
curl -s https://api.example.com/users | python -m json.tool

# Oder das JSON-Formatierungstool von ToolsKu verwenden

3. Antwortzeit messen

# Detaillierte Zeitstatistik
curl -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
  -o /dev/null -s https://api.example.com/users

# Ausgabe:
# DNS: 0.012s
# Connect: 0.035s
# TTFB: 0.120s
# Total: 0.125s

4. CORS-Probleme beheben

Browser-Fehler:
Access to fetch at 'https://api.example.com' from origin 'https://app.example.com'
has been blocked by CORS policy

Fehlerbehebungsschritte:
1. OPTIONS-Preflight-Anfrage prüfen
   curl -X OPTIONS -H "Origin: https://app.example.com" \
     -H "Access-Control-Request-Method: POST" \
     -i https://api.example.com/users

2. Antwort-Header prüfen
   Access-Control-Allow-Origin: https://app.example.com
   Access-Control-Allow-Methods: GET, POST, PUT, DELETE
   Access-Control-Allow-Headers: Content-Type, Authorization
   Access-Control-Max-Age: 86400

5. Authentifizierungsprobleme beheben

401 Unauthorized Fehlerbehebung:
1. Token abgelaufen? → JWT-Dekodierungstool verwenden, um exp zu prüfen
2. Token-Format korrekt? → Bearer-Präfix prüfen
3. Token gesendet? → curl -v Anfrage-Header prüfen

403 Forbidden Fehlerbehebung:
1. Hat der Benutzer Berechtigungen? → Benutzerrolle prüfen
2. Ist die IP auf der Whitelist? → Serverprotokolle prüfen
3. Ratenlimit überschritten? → Statuscode 429 prüfen

Bewährte Methoden für API-Tests

1. Umgebungsvariablen verwalten

# Umgebungsvariablen für sensible Informationen verwenden
export API_BASE="https://api.example.com"
export API_TOKEN="your-token"

curl -H "Authorization: Bearer $API_TOKEN" "$API_BASE/users"

2. Anfragesammlung

#!/bin/bash
# api-test.sh

BASE="https://api.example.com"
TOKEN="Bearer $API_TOKEN"
HEADER="-H 'Content-Type: application/json' -H 'Authorization: $TOKEN'"

# Benutzerliste abrufen
get_users() { curl -s $HEADER "$BASE/users" | jq; }

# Benutzer erstellen
create_user() { curl -s -X POST $HEADER -d "$1" "$BASE/users" | jq; }

# Einzelnen Benutzer abrufen
get_user() { curl -s $HEADER "$BASE/users/$1" | jq; }

# Verwendung
get_users
create_user '{"name":"Bob"}'
get_user 1

3. Automatisierte Tests

// API-Tests mit fetch schreiben
async function testApi() {
  // GET testen
  const listRes = await fetch('/api/users');
  console.assert(listRes.status === 200, 'GET /users should return 200');

  // POST testen
  const createRes = await fetch('/api/users', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ name: 'Test' }),
  });
  console.assert(createRes.status === 201, 'POST /users should return 201');

  const created = await createRes.json();
  console.assert(created.name === 'Test', 'Name should match');
}

Häufige Fragen

cURL-Anführungszeichen auf Windows falsch?

Windows CMD verwendet doppelte Anführungszeichen, PowerShell hat Escape-Probleme:

# In PowerShell ist cURL ein Alias für Invoke-WebRequest
# curl.exe verwenden, um das echte cURL aufzurufen
curl.exe -X POST https://api.example.com/users `
  -H "Content-Type: application/json" `
  -d '{\"name\": \"Alice\"}'

Wie Timeout-Probleme beheben?

1. DNS langsam? → curl -w time_namelookup prüfen
2. Verbindung langsam? → curl -w time_connect prüfen
3. Serververarbeitung langsam? → curl -w time_starttransfer - time_connect prüfen
4. Antwortübertragung langsam? → curl -w time_total - time_starttransfer prüfen

Zusammenfassung

API-Debugging ist Entwickleralltag — cURL-Befehle, HTTP-Statuscodes, Authentifizierungsmethoden und Debugging-Techniken beherrschen, um Schnittstellenprobleme schnell zu lokalisieren. Das cURL-zu-Code-Tool und das JSON-Formatierungstool von ToolsKu sind gute Begleiter beim API-Debugging und helfen Ihnen, Schnittstellen schnell zu testen und Antworten zu überprüfen.

#API testing#HTTP requests#cURL#API debugging#tutorial