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

  1. Ouvrir Outil cURL vers Code
  2. Coller la commande cURL
  3. Sélectionner le langage cible (JavaScript/Python/Go/Java, etc.)
  4. 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