Consommer et tester une API
Appeler une API depuis le navigateur ou le terminal, explorer avec un client graphique et automatiser les tests d'endpoints.
Une API ne vaut que si on sait l'appeler et prouver qu'elle répond correctement. Trois outils suffisent au quotidien : fetch dans le code, curl dans le terminal, un client graphique pour explorer.
🌐 Consommer avec fetch
async function chargerArticles() {
const reponse = await fetch("https://api.exemple.fr/v1/articles?limit=10", {
headers: { Accept: "application/json" },
})
if (!reponse.ok) {
throw new Error(`Échec HTTP ${reponse.status}`)
}
return reponse.json()
}fetch ne rejette pas la promesse sur un 404 ou un 500 : il ne rejette que sur une panne réseau. Testez toujours reponse.ok avant de lire le corps.
Pour une création, on précise la méthode, l'en-tête et le corps sérialisé :
await fetch("/v1/articles", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ titre: "REST", prix: 12 }),
})💻 Explorer avec curl
# Lecture
curl -s https://api.exemple.fr/v1/articles | jq
# Création avec corps JSON
curl -X POST https://api.exemple.fr/v1/articles \
-H "Content-Type: application/json" \
-d '{"titre":"REST","prix":12}'
# Voir les en-têtes et le code de statut
curl -i https://api.exemple.fr/v1/articles/42curl -i affiche les en-têtes de réponse : c'est le moyen le plus rapide de vérifier un code de statut, un Location après création ou une configuration CORS.
🧰 Clients graphiques
Postman, Insomnia ou Thunder Client (extension VS Code) permettent de sauvegarder des collections de requêtes, de gérer des variables d'environnement ({{baseUrl}}, {{token}}) et de partager le tout avec l'équipe.
Créer un environnement
Définissez baseUrl et token pour basculer entre local et production sans réécrire les requêtes.
Grouper par ressource
Un dossier par ressource (articles, users) avec les requêtes CRUD associées.
Enchaîner les appels
Récupérez l'id renvoyé par la création et réutilisez-le dans la requête de lecture.
Versionner la collection
Exportez le fichier JSON et commitez-le avec le code de l'API.
🧪 Automatiser les tests
Les tests d'API vérifient le contrat : code de statut, forme du corps, effets de bord.
npm install --save-dev vitest supertestimport { describe, it, expect } from "vitest"
import request from "supertest"
import app from "../src/app.js"
describe("GET /v1/articles/:id", () => {
it("renvoie 200 et l'article demandé", async () => {
const reponse = await request(app).get("/v1/articles/42")
expect(reponse.status).toBe(200)
expect(reponse.body).toHaveProperty("titre")
})
it("renvoie 404 pour un identifiant inconnu", async () => {
const reponse = await request(app).get("/v1/articles/999999")
expect(reponse.status).toBe(404)
})
})Testez d'abord les cas d'échec (404, 400, 401). Ce sont eux qui régressent le plus souvent lors d'un refactor, alors que le chemin nominal reste couvert par l'usage quotidien.
✅ Points clés à retenir
fetchréussit même sur une erreur HTTP : contrôlezreponse.ok;curl -idonne le code de statut et les en-têtes en une commande ;- une collection versionnée sert aussi de documentation vivante ;
- les tests automatisés figent le contrat de l'API.
Quiz du chapitre
API REST
Terminez le quiz du chapitre pour le marquer comme complété.
Bonnes pratiques d'API
Versionner une API, uniformiser les erreurs, comprendre HATEOAS, configurer CORS et documenter avec OpenAPI.
Exercice — Concevoir et implémenter une API REST
Concevoir les routes d'une API de tâches, choisir méthodes et codes de statut, puis implémenter la logique de réponse en respectant le contrat REST.