Référence de l’API

testingapis.com est une API gratuite pour tester les clients HTTP. Elle compte 360 points d’accès en 53 groupes : des ressources réalistes comme des produits, des livres et des pays, plus des points d’accès pour les codes de statut, les redirections, les cookies, le cache, les schémas d’authentification, les formats de fichiers, le streaming et l’injection de pannes. Echo, les méthodes HTTP, les codes de statut et les ressources products, posts et todos ne demandent pas de compte. Le reste demande un compte gratuit.

URL de base
https://api.testingapis.com
Démarrage rapide
fetch('https://api.testingapis.com/api/Products?limit=3')
  .then(res => res.json())
  .then(data => console.log(data))

Découverte

QuoiOù
Document OpenAPI 3.0https://api.testingapis.com/openapi/v1.jsonConnectez-vous pour voir
Swagger UIhttps://api.testingapis.com/swagger/index.htmlConnectez-vous pour voir
Catalogue des routes en directGET https://api.testingapis.com/apiConnectez-vous pour voir
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 et mutations
WebSockets
wss://api.testingapis.com/ws/echowss://api.testingapis.com/ws/ticker

Authentification

Les points d’accès sans note d’authentification sont publics. Ceux qui testent l’authentification acceptent les identifiants de test fixes ci-dessous. Ils ne sont pas secrets.

SchémaComment l’envoyerValeurs de testUtilisé par
HTTP BasicAuthorization: Basic base64(user:pass)apibee / password123 · Admin / Admin@1234 (API d’origine)/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 avec admin / admin123 ou user / user123 · POST /api/User/Login avec Michael / Thompson/api/auth/jwt/me, /api/auth/jwt/admin, /api/Admin/authorize
API keyEn-tête X-API-Key, ?api_key= ou cookie api_keyapibee-key-123/api/auth/api-key/*
OAuth 2.0Authorization: Bearer <access_token>Clients apibee-client / apibee-secret et apibee-public (PKCE) · utilisateurs 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 (n’expire jamais) · HMAC-SHA1, HMAC-SHA256, HMAC-SHA512 ou PLAINTEXT/api/auth/oauth1, /api/auth/oauth1/*
DigestDéfi et réponse RFC 7616apibee / password123/api/auth/digest
Signature HMACEn-têtes X-Timestamp et X-SignatureSecret apibee-hmac-secret/api/auth/hmac
Cookie de sessionCookie apibee_sessionPOST /api/cookies/login avec test / test123 ou admin / admin123/api/cookies/me
CSRFCookie XSRF-TOKEN et en-tête X-CSRF-TokenToken issu de GET /api/auth/csrf/token/api/auth/csrf/submit

Un 401 signifie que les identifiants manquent ou ne sont pas valides. Un 403 signifie qu’ils sont valides mais pas autorisés, par exemple user-token sur /api/auth/roles/admin.

Les exemples utilisent ces repères pour les valeurs qui changent à chaque exécution :

RepèreOù l’obtenir
{{userJwt}} / {{adminJwt}}accessToken issu de POST /api/auth/jwt/login avec user / user123 ou admin / admin123.
{{refreshToken}}refreshToken issu de POST /api/auth/jwt/login.
{{legacyJwt}}token issu de POST /api/User/Login avec Michael / Thompson (rôle Admin).
{{oauthAccessToken}}access_token issu de POST /api/auth/oauth/token.
{{oauth1RequestToken}} / {{oauth1RequestSecret}} / {{oauth1Verifier}}oauth_token et oauth_token_secret issus de POST /api/auth/oauth1/request_token avec oauth_callback=oob, puis oauth_verifier issu de GET /api/auth/oauth1/authorize.
{{csrfToken}}token issu de GET /api/auth/csrf/token. La même valeur est posée dans le cookie XSRF-TOKEN.
{{sessionId}}Cookie apibee_session posé par POST /api/cookies/login (test / test123).
{{unixTimestamp}} / {{hmacSignature}}L’heure Unix actuelle en secondes, et le HMAC-SHA256 en hexadécimal de "{timestamp}.{raw body}" avec la clé apibee-hmac-secret.
{{uuid}}N’importe quel nouvel UUID, utilisé comme Idempotency-Key.

Connectez-vous pour voir les détails

Les paramètres, les exemples de requête et de réponse et le panneau Try it en direct pour les points d’accès d’authentification sont réservés aux membres connectés. Les comptes sont gratuits et se créent en quelques secondes.

Délais et erreurs simulées

Deux paramètres de query fonctionnent sur tous les points d’accès :

ParamètreEffetExemple
delayAttend N secondes avant de répondre. 10 au maximum./api/Products?delay=2
errorRenvoie une erreur simulée à la place de la vraie réponse : 400, 401, 403, 404, 408, 429, 500, 502 ou 503. Ajoute l’en-tête X-Simulated: true./api/Products?error=503

Combinés, comme dans ?delay=2&error=503, la requête attend puis échoue. Une erreur simulée ressemble à ceci :

Erreur simulée
{
  "status": 503,
  "error": "Service Unavailable",
  "message": "Simulated error. Use ?error={code} to test different status codes.",
  "simulated": true
}

Filtres, tri et pagination

Chaque point d’accès qui liste une ressource, comme GET /api/Products, accepte ces paramètres de query :

ParamètreSignificationExemple
limitTaille de page, de 1 à 100. Sans lui, tous les enregistrements sont renvoyés.?limit=10
pageNuméro de page, à partir de 1. Demande limit.?limit=10&page=2
offsetSaute N enregistrements, à la place de page.?limit=10&offset=20
sort, orderTrie sur n’importe quel champ. order vaut asc (par défaut) ou desc.?sort=price&order=desc
qRecherche insensible à la casse dans les champs title, name, body, description et text.?q=keyboard
n’importe quel champFiltre exact, insensible à la casse, sur cette propriété.?category=books&inStock=true

Les listes renvoient un simple tableau JSON. Les totaux sont dans les en-têtes X-Total-Count, X-Page, X-Per-Page et X-Total-Pages. La pagination par curseur, en-tête Link, keyset et HAL est présentée dans Pagination.

Réponses et erreurs

SituationStatutCorps
Obtenir un enregistrement200L’enregistrement
Lister des enregistrements200Tableau d’enregistrements, plus les en-têtes de pagination
Créer201{ message, data }
Créer en masse201{ message, data: [ … ] }
Remplacer ou modifier200{ message, data }
Modification partielle (PATCH)200{ message, changed, ignored, data }
Supprimer200{ message }
Supprimer en masse200{ message, deleted, notFound }
Erreur4xx ou 5xx{ status, error, message }
Erreur de validation du modèle400application/problem+json avec les erreurs par champ
Validation métier422application/problem+json (RFC 7807) avec les erreurs par champ
Erreur
{
  "status": 404,
  "error": "Not Found",
  "message": "Book with ID 999 does not exist."
}

Chaque réponse autorise toutes les origines (Access-Control-Allow-Origin: *, sans identifiants) et expose au code du navigateur les en-têtes de pagination, de cache, de limite de débit et de versionnage. Les en-têtes X-RateLimit-* sont indicatifs ; la vraie limitation n’a lieu que sur Limite de débit.

Toutes les données vivent en mémoire. Les créations, modifications et suppressions fonctionnent, mais tout revient aux données de départ au redémarrage du serveur.

Appels depuis un navigateur

  • Cookies. Les navigateurs ne laissent pas JavaScript poser l’en-tête Cookie, et les requêtes cross-origin ne portent pas d’identifiants. Les points d’accès à base de cookies ne fonctionnent que depuis la même origine ou via le proxy.
  • Redirections. fetch() suit les redirections et masque la réponse 3xx. Pour voir le vrai statut et l’en-tête Location, passez par le proxy.
  • Proxy. POST /api/Proxy/call transmet une requête depuis le serveur et renvoie son statut et son corps. Il contourne les limites de CORS, de cookies et de redirections, mais ne relaie pas les en-têtes de réponse.
  • Streams. /api/stream/sse est un flux Server-Sent Events. Les flux NDJSON, chunked, drip et tableau JSON arrivent au fur et à mesure ; lisez-les avec un lecteur de streaming.
  • WebSockets. /ws/echo et /ws/ticker demandent l’API WebSocket, pas fetch.
  • Authentification Digest. Les navigateurs ne font le défi et la réponse qu’à travers leur propre fenêtre de connexion.
  • Injection de pannes. /api/chaos/abort et /api/chaos/partial coupent la connexion exprès. /api/chaos/timeout et /api/chaos/slow peuvent prendre jusqu’à 60 secondes.
  • En-têtes interdits. Les navigateurs refusent de poser Host, Content-Length, Accept-Encoding, Cookie et quelques autres.

Connectez-vous pour voir les détails

Les paramètres, les exemples de requête et de réponse et le panneau Try it en direct pour ces notes sont réservés aux membres connectés. Les comptes sont gratuits et se créent en quelques secondes.

Points d’accès

360 points d’accès en 53 groupes. Chaque groupe ouvre sa référence, avec les paramètres et des exemples de requêtes et de réponses.

Pour commencer

4 points d’accès

Un catalogue en direct de tous les points d’accès, plus des health checks.