Guide de Test et de Débogage d'API : De cURL aux Outils en Ligne
Outils de développement
Méthodes de Requête HTTP
| Méthode | Usage | Idempotente | Sûre |
|---|---|---|---|
| GET | Obtenir une ressource | ✅ | ✅ |
| POST | Créer une ressource | ❌ | ❌ |
| PUT | Mise à jour complète | ✅ | ❌ |
| PATCH | Mise à jour partielle | ❌ | ❌ |
| DELETE | Supprimer une ressource | ✅ | ❌ |
| HEAD | Obtenir les en-têtes | ✅ | ✅ |
| OPTIONS | Prévol CORS | ✅ | ✅ |
En-têtes de Requête Courants
| En-tête | Description | Exemple |
|---|---|---|
Content-Type |
Format du corps | application/json |
Accept |
Format de réponse attendu | application/json |
Authorization |
Information d'authentification | Bearer token... |
User-Agent |
Identification du client | Mozilla/5.0... |
Cookie |
Cookie | session=abc123 |
X-Request-ID |
ID de suivi de requête | UUID |
Valeurs Courantes de Content-Type
| Valeur | Usage |
|---|---|
application/json |
Données JSON |
application/x-www-form-urlencoded |
Données de formulaire |
multipart/form-data |
Téléchargement de fichier |
text/plain |
Texte brut |
text/html |
HTML |
Méthodes d'Authentification
1. Bearer Token (le plus utilisé)
# 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 (encodage automatique)
curl -u username:password https://api.example.com/users
# Encodage manuel
# Base64("username:password") = "dXNlcm5hbWU6cGFzc3dvcmQ="
curl -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
https://api.example.com/users
3. API Key
# Méthode 1 : Header
curl -H "X-API-Key: your-api-key" \
https://api.example.com/users
# Méthode 2 : Paramètre de requête
curl "https://api.example.com/users?api_key=your-api-key"
Détail de la Commande cURL
Requête GET Basique
# GET le plus simple
curl https://api.example.com/users
# Afficher les en-têtes de réponse
curl -i https://api.example.com/users
# Afficher uniquement les en-têtes de réponse
curl -I https://api.example.com/users
# Suivre les redirections
curl -L https://example.com/redirect
Requête POST
# Données JSON
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@example.com"}'
# Données de formulaire
curl -X POST https://api.example.com/users \
-d "name=Alice&email=alice@example.com"
# Téléchargement de fichier
curl -X POST https://api.example.com/upload \
-F "file=@photo.jpg" \
-F "description=My photo"
Options Avancées
# Paramètre de délai d'attente
curl --connect-timeout 5 --max-time 30 https://api.example.com
# Enregistrer dans un fichier
curl -o response.json https://api.example.com/users
# Mode silencieux (sans barre de progression)
curl -s https://api.example.com/users
# Sortie détaillée (pour le débogage)
curl -v https://api.example.com/users
# Ignorer la vérification du certificat SSL (uniquement en développement)
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
# Enregistrer et envoyer les Cookie
curl -c cookies.txt -b cookies.txt https://api.example.com/users
Codes d'État HTTP Courants
| Code | Signification | Cause Courante |
|---|---|---|
| 200 | OK | Succès |
| 201 | Created | POST créé avec succès |
| 204 | No Content | DELETE réussi |
| 301 | Moved Permanently | Redirection permanente |
| 304 | Not Modified | Cache atteint |
| 400 | Bad Request | Paramètres incorrects |
| 401 | Unauthorized | Non authentifié |
| 403 | Forbidden | Pas de permission |
| 404 | Not Found | Ressource inexistante |
| 409 | Conflict | Conflit de ressource |
| 422 | Unprocessable Entity | Échec de validation |
| 429 | Too Many Requests | Limitation de débit |
| 500 | Internal Server Error | Erreur serveur |
| 502 | Bad Gateway | Service amont indisponible |
| 503 | Service Unavailable | Service surchargé |
Utiliser ToolsKu pour Tester les API
Convertir cURL en Code
- Ouvrir Outil cURL vers Code
- Coller la commande cURL
- Sélectionner le langage cible (JavaScript/Python/Go/Java, etc.)
- Copier le code généré
Exemple
# Entrée cURL
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token123" \
-d '{"name": "Alice"}'
Converti en 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();
Techniques de Débogage d'API
1. Voir la Requête/Réponse Complète
# -v affiche les informations détaillées
curl -v https://api.example.com/users
# Sortie :
> GET /users HTTP/1.1 ← Ligne de requête
> Host: api.example.com ← En-têtes de requête
> Authorization: Bearer ...
>
< HTTP/1.1 200 OK ← Ligne de réponse
< Content-Type: application/json ← En-têtes de réponse
< X-RateLimit-Remaining: 99
<
[{"id": 1, "name": "Alice"}] ← Corps de réponse
2. Formater la Réponse JSON
# Formater avec jq
curl -s https://api.example.com/users | jq
# Avec python
curl -s https://api.example.com/users | python -m json.tool
# Ou utiliser l'outil de formatage JSON de ToolsKu
3. Mesurer le Temps de Réponse
# Statistiques détaillées du temps
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
# Sortie :
# DNS: 0.012s
# Connect: 0.035s
# TTFB: 0.120s
# Total: 0.125s
4. Résoudre les Problèmes CORS
Erreur du navigateur :
Access to fetch at 'https://api.example.com' from origin 'https://app.example.com'
has been blocked by CORS policy
Étapes de résolution :
1. Vérifier la requête preflight OPTIONS
curl -X OPTIONS -H "Origin: https://app.example.com" \
-H "Access-Control-Request-Method: POST" \
-i https://api.example.com/users
2. Vérifier les en-têtes de réponse
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. Résoudre les Problèmes d'Authentification
Résolution de 401 Unauthorized :
1. Le Token a expiré ? → Utiliser l'outil de décodage JWT pour vérifier exp
2. Le format du Token est correct ? → Vérifier le préfixe Bearer
3. Le Token a été envoyé ? → curl -v vérifier les en-têtes de requête
Résolution de 403 Forbidden :
1. L'utilisateur a-t-il les permissions ? → Vérifier le rôle utilisateur
2. L'IP est-elle sur la liste blanche ? → Vérifier les logs du serveur
3. Limite de débit dépassée ? → Vérifier le code d'état 429
Meilleures Pratiques de Test d'API
1. Gestion des Variables d'Environnement
# Utiliser des variables d'environnement pour stocker les informations sensibles
export API_BASE="https://api.example.com"
export API_TOKEN="your-token"
curl -H "Authorization: Bearer $API_TOKEN" "$API_BASE/users"
2. Collection de Requêtes
#!/bin/bash
# api-test.sh
BASE="https://api.example.com"
TOKEN="Bearer $API_TOKEN"
HEADER="-H 'Content-Type: application/json' -H 'Authorization: $TOKEN'"
# Obtenir la liste des utilisateurs
get_users() { curl -s $HEADER "$BASE/users" | jq; }
# Créer un utilisateur
create_user() { curl -s -X POST $HEADER -d "$1" "$BASE/users" | jq; }
# Obtenir un utilisateur
get_user() { curl -s $HEADER "$BASE/users/$1" | jq; }
# Utilisation
get_users
create_user '{"name":"Bob"}'
get_user 1
3. Tests Automatisés
// Écrire des tests d'API avec fetch
async function testApi() {
// Tester GET
const listRes = await fetch('/api/users');
console.assert(listRes.status === 200, 'GET /users should return 200');
// Tester POST
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');
}
Questions Fréquentes
Problèmes de guillemets cURL sur Windows ?
Windows CMD utilise des guillemets doubles, PowerShell a des problèmes d'échappement :
# Dans PowerShell, cURL est un alias d'Invoke-WebRequest
# Utiliser curl.exe pour appeler le vrai cURL
curl.exe -X POST https://api.example.com/users `
-H "Content-Type: application/json" `
-d '{\"name\": \"Alice\"}'
Comment résoudre les dépassements de délai ?
1. DNS lent ? → curl -w vérifier time_namelookup
2. Connexion lente ? → curl -w vérifier time_connect
3. Traitement serveur lent ? → curl -w vérifier time_starttransfer - time_connect
4. Transmission de réponse lente ? → curl -w vérifier time_total - time_starttransfer
Résumé
Le débogage d'API fait partie du quotidien du développeur — maîtriser les commandes cURL, les codes d'état HTTP, les méthodes d'authentification et les techniques de débogage permet de localiser rapidement les problèmes d'interface. L'Outil cURL vers Code et l'Outil de Formatage JSON de ToolsKu sont de bons compagnons pour le débogage d'API, vous aidant à tester rapidement les interfaces et à examiner les réponses.
#API testing#HTTP requests#cURL#API debugging#tutorial