Apprendre / Aide-mémoire
Aide-mémoire HTTP pour le test d’API
Ce qu’un testeur doit savoir de HTTP, sur une seule fiche : quelles méthodes sont sûres et idempotentes, quel code de statut chaque situation doit renvoyer, les en-têtes qui méritent une assertion, les options cURL que vous utiliserez tous les jours et une checklist pour chaque réponse.
Vérifié avec Sémantique HTTP selon la RFC 9110 ; Problem Details selon la RFC 9457
Méthodes
| Méthode | Usage | Sûre | Idempotente |
|---|---|---|---|
GET | Lire une ressource ou une collection | Oui | Oui |
HEAD | Comme GET, en-têtes seulement | Oui | Oui |
OPTIONS | Méthodes autorisées ; preflight CORS | Oui | Oui |
POST | Créer, ou exécuter une action | Non | Non |
PUT | Remplacer toute la ressource | Non | Oui |
PATCH | Modifier certains champs | Non | Non garanti |
DELETE | Supprimer une ressource | Non | Oui |
Idempotent signifie que répéter la requête laisse le serveur dans le même état. La réponse peut différer : un second DELETE peut renvoyer 404.
Codes de statut à vérifier
| Code | Signification | Test typique |
|---|---|---|
200 OK | Succès avec un corps | GET sur une ressource existante |
201 Created | Ressource créée | POST de données valides ; vérifier l’en-tête Location |
204 No Content | Succès, corps vide | DELETE, ou PUT qui ne renvoie rien |
301 / 308 | Déplacé définitivement | L’ancienne URL redirige ; 308 conserve la méthode |
304 Not Modified | La copie en cache est toujours valide | GET avec If-None-Match: <etag> |
400 Bad Request | Requête mal formée | JSON invalide, mauvais types |
401 Unauthorized | Non authentifié | Token absent ou expiré |
403 Forbidden | Authentifié, mais non autorisé | Accéder à la ressource d’un autre utilisateur |
404 Not Found | Ressource inexistante | Id inconnu (ou masquage d’une ressource que vous ne devez pas voir) |
405 Method Not Allowed | Mauvaise méthode pour cette URL | DELETE sur un endpoint en lecture seule |
409 Conflict | Conflit avec l’état actuel | E-mail en double, version obsolète |
415 Unsupported Media Type | Format de corps non accepté | Envoyer du text/plain à un endpoint JSON |
422 Unprocessable Content | JSON valide, valeurs invalides | Erreurs de validation des règles métier |
429 Too Many Requests | Limite de débit atteinte | Rafale de requêtes ; vérifier Retry-After |
500 Internal Server Error | Bug côté serveur | Jamais attendu : toujours un défaut |
502 / 503 / 504 | Échec en amont, indisponible, timeout | Dépendance en panne ; vérifier les retries |
En-têtes à vérifier
| En-tête | Exemple | Pourquoi |
|---|---|---|
Content-Type | application/json; charset=utf-8 | Le format de la réponse correspond au corps |
Accept | application/json | Le client demande un format ; attendez un 406 s’il n’est pas pris en charge |
Authorization | Bearer eyJhbGciOi… | Authentification par token ; absent → 401 |
Location | /api/orders/1043 | Renseigné sur un 201 Created et sur les redirections |
Cache-Control | no-store | Les données personnelles ou sensibles ne doivent pas être mises en cache |
ETag / If-None-Match | "a1b2c3" | GET conditionnel → 304 |
Retry-After | 30 | Envoyé avec un 429 ou un 503 |
Set-Cookie | sid=…; HttpOnly; Secure; SameSite=Lax | Les cookies de session exigent HttpOnly et Secure |
Access-Control-Allow-Origin | https://app.example.com | CORS : jamais * pour les requêtes avec identifiants |
cURL
| Tâche | Code |
|---|---|
| Afficher le statut et les en-têtes | curl -i https://api.example.com/users/1 |
| Trace complète requête/réponse | curl -v https://api.example.com/users/1 |
| POST de JSON | 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 |
| Authentification Basic | curl -u user:pass https://api.example.com/admin |
| Suivre les redirections | curl -L https://example.com/old |
| Seulement le code de statut | curl -s -o /dev/null -w '%{http_code}' https://api.example.com/health |
| Échouer sur 4xx/5xx dans les scripts | curl --fail-with-body https://api.example.com/health |
Dans cmd sous Windows, remplacez les guillemets simples par des guillemets doubles et échappez ceux qui sont à l’intérieur.
Checklist pour chaque réponse
| Vérification | Exemple |
|---|---|
| Code de statut | Exactement 201, pas « n’importe quel 2xx » |
| Schéma du corps | Champs obligatoires présents, types corrects, aucun champ sensible en trop |
| Valeurs | L’entrée renvoyée correspond ; les champs calculés (totaux, dates) sont justes |
| En-têtes | Content-Type, Location, Cache-Control |
| Format des erreurs | Format d’erreur cohérent (par ex. problem details de la RFC 9457) avec un message utile |
| Effets de bord | L’enregistrement existe, ou non, quand vous le relisez avec un GET |
| Temps de réponse | Dans le budget convenu |