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.
https://api.testingapis.comfetch('https://api.testingapis.com/api/Products?limit=3')
.then(res => res.json())
.then(data => console.log(data))Découverte
| Quoi | Où |
|---|---|
| Document OpenAPI 3.0 | https://api.testingapis.com/openapi/v1.jsonConnectez-vous pour voir |
| Swagger UI | https://api.testingapis.com/swagger/index.htmlConnectez-vous pour voir |
| Catalogue des routes en direct | GET 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 | |
| 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éma | Comment l’envoyer | Valeurs de test | Utilisé par |
|---|---|---|---|
| HTTP Basic | Authorization: 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/* |
| JWT | Authorization: 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 key | En-tête X-API-Key, ?api_key= ou cookie api_key | apibee-key-123 | /api/auth/api-key/* |
| OAuth 2.0 | Authorization: Bearer <access_token> | Clients apibee-client / apibee-secret et apibee-public (PKCE) · utilisateurs apibee / password123, jane / jane123 | /api/auth/oauth/protected, /userinfo |
| OAuth 1.0a | Authorization: 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/* |
| Digest | Défi et réponse RFC 7616 | apibee / password123 | /api/auth/digest |
| Signature HMAC | En-têtes X-Timestamp et X-Signature | Secret apibee-hmac-secret | /api/auth/hmac |
| Cookie de session | Cookie apibee_session | POST /api/cookies/login avec test / test123 ou admin / admin123 | /api/cookies/me |
| CSRF | Cookie XSRF-TOKEN et en-tête X-CSRF-Token | Token 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ère | Où 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ètre | Effet | Exemple |
|---|---|---|
delay | Attend N secondes avant de répondre. 10 au maximum. | /api/Products?delay=2 |
error | Renvoie 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 :
{
"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ètre | Signification | Exemple |
|---|---|---|
limit | Taille de page, de 1 à 100. Sans lui, tous les enregistrements sont renvoyés. | ?limit=10 |
page | Numéro de page, à partir de 1. Demande limit. | ?limit=10&page=2 |
offset | Saute N enregistrements, à la place de page. | ?limit=10&offset=20 |
sort, order | Trie sur n’importe quel champ. order vaut asc (par défaut) ou desc. | ?sort=price&order=desc |
q | Recherche insensible à la casse dans les champs title, name, body, description et text. | ?q=keyboard |
n’importe quel champ | Filtre 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
| Situation | Statut | Corps |
|---|---|---|
| Obtenir un enregistrement | 200 | L’enregistrement |
| Lister des enregistrements | 200 | Tableau d’enregistrements, plus les en-têtes de pagination |
| Créer | 201 | { message, data } |
| Créer en masse | 201 | { message, data: [ … ] } |
| Remplacer ou modifier | 200 | { message, data } |
| Modification partielle (PATCH) | 200 | { message, changed, ignored, data } |
| Supprimer | 200 | { message } |
| Supprimer en masse | 200 | { message, deleted, notFound } |
| Erreur | 4xx ou 5xx | { status, error, message } |
| Erreur de validation du modèle | 400 | application/problem+json avec les erreurs par champ |
| Validation métier | 422 | application/problem+json (RFC 7807) avec les erreurs par champ |
{
"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/calltransmet 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/sseest 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/echoet/ws/tickerdemandent 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/abortet/api/chaos/partialcoupent la connexion exprès./api/chaos/timeoutet/api/chaos/slowpeuvent 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èsUn catalogue en direct de tous les points d’accès, plus des health checks.
Les bases de HTTP
44 points d’accèsMéthodes, codes de statut, redirections, cookies, cache et corps de requête.
Formats et données
62 points d’accèsTypes de contenu courants, téléchargements de fichiers, cas limites JSON et utilitaires.
Authentification et sécurité
38 points d’accèsSchémas d’authentification, OAuth 2.0 et 1.0a, JWT, limite de débit et paiements.
Modèles d’API
50 points d’accèsStreaming, WebSockets, tâches asynchrones, pagination, injection de pannes et plus.
Ressources
142 points d’accèsDes jeux de données réalistes comme des produits, des posts, des livres et des pays.
API d’origine
20 points d’accèsLa première version de l’API : utilisateurs en JSON et XML, envois de fichiers et tests d’authentification.