API-Referenz

testingapis.com ist eine kostenlose API zum Testen von HTTP-Clients. Sie hat 360 Endpunkte in 53 Gruppen: realistische Ressourcen wie Produkte, Bücher und Länder, dazu Endpunkte für Statuscodes, Weiterleitungen, Cookies, Caching, Authentifizierungsverfahren, Dateiformate, Streaming und Fehlerinjektion. Echo, HTTP-Methoden, Statuscodes und die Ressourcen products, posts und todos brauchen kein Konto. Der Rest braucht ein kostenloses Konto.

Basis-URL
https://api.testingapis.com
Schnellstart
fetch('https://api.testingapis.com/api/Products?limit=3')
  .then(res => res.json())
  .then(data => console.log(data))

Discovery

WasWo
OpenAPI-3.0-Dokumenthttps://api.testingapis.com/openapi/v1.jsonAnmelden zum Ansehen
Swagger UIhttps://api.testingapis.com/swagger/index.htmlAnmelden zum Ansehen
Live-RoutenkatalogGET https://api.testingapis.com/apiAnmelden zum Ansehen
Health Checks
GET https://api.testingapis.com/api/healthGET https://api.testingapis.com/api/health/liveGET https://api.testingapis.com/api/health/ready
GraphQL
POST https://api.testingapis.com/graphql
Queries und Mutations
WebSockets
wss://api.testingapis.com/ws/echowss://api.testingapis.com/ws/ticker

Authentifizierung

Endpunkte ohne Hinweis zur Authentifizierung sind öffentlich. Die Endpunkte, die Authentifizierung testen, nehmen die festen Testzugangsdaten unten an. Sie sind nicht geheim.

VerfahrenSo wird es gesendetTestwerteGenutzt von
HTTP BasicAuthorization: Basic base64(user:pass)apibee / password123 · Admin / Admin@1234 (ursprüngliche API)/api/auth/basic*, /api/AuthTest/secure-data
Bearer (static)Authorization: Bearer <token>apibee-token-123 · admin-token · user-token · readonly-token/api/auth/bearer, /api/auth/roles/*
JWTAuthorization: Bearer <jwt>POST /api/auth/jwt/login mit admin / admin123 oder user / user123 · POST /api/User/Login mit Michael / Thompson/api/auth/jwt/me, /api/auth/jwt/admin, /api/Admin/authorize
API keyHeader X-API-Key, ?api_key= oder Cookie api_keyapibee-key-123/api/auth/api-key/*
OAuth 2.0Authorization: Bearer <access_token>Clients apibee-client / apibee-secret und apibee-public (PKCE) · Benutzer apibee / password123, jane / jane123/api/auth/oauth/protected, /userinfo
OAuth 1.0aAuthorization: OAuth oauth_consumer_key="…", oauth_signature="…", …Consumer apibee-consumer-key / apibee-consumer-secret · Token apibee-access-token / apibee-token-secret (läuft nie ab) · HMAC-SHA1, HMAC-SHA256, HMAC-SHA512 oder PLAINTEXT/api/auth/oauth1, /api/auth/oauth1/*
DigestChallenge und Response nach RFC 7616apibee / password123/api/auth/digest
HMAC-SignaturHeader X-Timestamp und X-SignatureGeheimnis apibee-hmac-secret/api/auth/hmac
Session-CookieCookie apibee_sessionPOST /api/cookies/login mit test / test123 oder admin / admin123/api/cookies/me
CSRFCookie XSRF-TOKEN und Header X-CSRF-TokenToken aus GET /api/auth/csrf/token/api/auth/csrf/submit

401 heißt, die Zugangsdaten fehlen oder sind ungültig. 403 heißt, sie sind gültig, aber nicht erlaubt, zum Beispiel user-token an /api/auth/roles/admin.

Die Beispiele nutzen diese Platzhalter für Werte, die sich bei jedem Lauf ändern:

PlatzhalterWoher er kommt
{{userJwt}} / {{adminJwt}}accessToken aus POST /api/auth/jwt/login mit user / user123 oder admin / admin123.
{{refreshToken}}refreshToken aus POST /api/auth/jwt/login.
{{legacyJwt}}token aus POST /api/User/Login mit Michael / Thompson (Rolle Admin).
{{oauthAccessToken}}access_token aus POST /api/auth/oauth/token.
{{oauth1RequestToken}} / {{oauth1RequestSecret}} / {{oauth1Verifier}}oauth_token und oauth_token_secret aus POST /api/auth/oauth1/request_token mit oauth_callback=oob, dann oauth_verifier aus GET /api/auth/oauth1/authorize.
{{csrfToken}}token aus GET /api/auth/csrf/token. Derselbe Wert wird als Cookie XSRF-TOKEN gesetzt.
{{sessionId}}Cookie apibee_session, gesetzt von POST /api/cookies/login (test / test123).
{{unixTimestamp}} / {{hmacSignature}}Die aktuelle Unix-Zeit in Sekunden und der hexadezimale HMAC-SHA256 von "{timestamp}.{raw body}" mit dem Schlüssel apibee-hmac-secret.
{{uuid}}Eine beliebige neue UUID, als Idempotency-Key.

Melde dich an, um die Details zu sehen

Die Parameter, die Beispiele für Request und Antwort und das Live-Panel Try it für die Authentifizierungsendpunkte sind für angemeldete Mitglieder. Konten sind kostenlos und in wenigen Sekunden angelegt.

Verzögerungen und simulierte Fehler

Zwei Query-Parameter funktionieren an jedem Endpunkt:

ParameterWirkungBeispiel
delayWartet N Sekunden vor der Antwort. Höchstens 10./api/Products?delay=2
errorGibt statt der echten Antwort einen simulierten Fehler zurück: 400, 401, 403, 404, 408, 429, 500, 502 oder 503. Setzt den Header X-Simulated: true./api/Products?error=503

Kombiniert, wie in ?delay=2&error=503, wartet der Request und schlägt dann fehl. Ein simulierter Fehler sieht so aus:

Simulierter Fehler
{
  "status": 503,
  "error": "Service Unavailable",
  "message": "Simulated error. Use ?error={code} to test different status codes.",
  "simulated": true
}

Filtern, Sortieren und Paginierung

Jeder Listen-Endpunkt einer Ressource, etwa GET /api/Products, nimmt diese Query-Parameter an:

ParameterBedeutungBeispiel
limitSeitengröße, 1 bis 100. Ohne ihn kommen alle Datensätze zurück.?limit=10
pageSeitennummer ab 1. Braucht limit.?limit=10&page=2
offsetÜberspringt N Datensätze, als Alternative zu page.?limit=10&offset=20
sort, orderSortiert nach einem beliebigen Feld. order ist asc (Standard) oder desc.?sort=price&order=desc
qSuche ohne Beachtung der Groß- und Kleinschreibung in den Feldern title, name, body, description und text.?q=keyboard
beliebiges FeldExakter Filter auf diese Eigenschaft, ohne Beachtung der Groß- und Kleinschreibung.?category=books&inStock=true

Listen geben ein einfaches JSON-Array zurück. Die Summen stehen in den Headern X-Total-Count, X-Page, X-Per-Page und X-Total-Pages. Paginierung per Cursor, Link-Header, Keyset und HAL zeigt Paginierung.

Antworten und Fehler

SituationStatusBody
Einen Datensatz abrufen200Der Datensatz
Datensätze auflisten200Array von Datensätzen, plus Paginierungs-Header
Anlegen201{ message, data }
Massenhaft anlegen201{ message, data: [ … ] }
Ersetzen oder ändern200{ message, data }
Teilweise ändern (PATCH)200{ message, changed, ignored, data }
Löschen200{ message }
Massenhaft löschen200{ message, deleted, notFound }
Fehler4xx oder 5xx{ status, error, message }
Validierungsfehler des Modells400application/problem+json mit Fehlern pro Feld
Fachliche Validierung422application/problem+json (RFC 7807) mit Fehlern pro Feld
Fehler
{
  "status": 404,
  "error": "Not Found",
  "message": "Book with ID 999 does not exist."
}

Jede Antwort erlaubt jeden Origin (Access-Control-Allow-Origin: *, ohne Credentials) und gibt Browser-Code die Header für Paginierung, Caching, Rate Limit und Versionierung frei. Die X-RateLimit-*-Header dienen nur zur Information; echt begrenzt wird nur bei Rate Limiting.

Alle Daten liegen im Speicher. Anlegen, Ändern und Löschen funktioniert, aber beim Neustart des Servers springt alles auf die Startdaten zurück.

Aufrufe aus dem Browser

  • Cookies. Browser lassen JavaScript den Cookie-Header nicht setzen, und Cross-Origin-Requests tragen keine Credentials. Cookie-basierte Endpunkte funktionieren nur vom selben Origin oder über den Proxy.
  • Weiterleitungen. fetch() folgt Weiterleitungen und verbirgt die 3xx-Antwort. Um den echten Status und den Location-Header zu sehen, nutze den Proxy.
  • Proxy. POST /api/Proxy/call leitet einen Request vom Server aus weiter und gibt dessen Status und Body zurück. Das umgeht die Grenzen bei CORS, Cookies und Weiterleitungen, gibt aber keine Antwort-Header weiter.
  • Streams. /api/stream/sse ist Server-Sent Events. Die Streams NDJSON, chunked, drip und JSON-Array kommen nach und nach an; lies sie mit einem Streaming-Reader.
  • WebSockets. /ws/echo und /ws/ticker brauchen die WebSocket-API, nicht fetch.
  • Digest-Auth. Browser führen Challenge und Response nur über ihren eigenen Login-Dialog aus.
  • Fehlerinjektion. /api/chaos/abort und /api/chaos/partial brechen die Verbindung absichtlich ab. /api/chaos/timeout und /api/chaos/slow können bis zu 60 Sekunden dauern.
  • Verbotene Header. Browser weigern sich, Host, Content-Length, Accept-Encoding, Cookie und einige andere zu setzen.

Melde dich an, um die Details zu sehen

Die Parameter, die Beispiele für Request und Antwort und das Live-Panel Try it für diese Hinweise sind für angemeldete Mitglieder. Konten sind kostenlos und in wenigen Sekunden angelegt.

Endpunkte

360 Endpunkte in 53 Gruppen. Jede Gruppe öffnet ihre Referenz mit Parametern sowie Beispielen für Requests und Antworten.

Erste Schritte

4 Endpunkte

Ein Live-Katalog aller Endpunkte, dazu Health Checks.