TW3 — Technologies du Web 3

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/42

curl -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 supertest
import { 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

  • fetch réussit même sur une erreur HTTP : contrôlez reponse.ok ;
  • curl -i donne 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

5 questions
0 / 5 répondue0%
  1. 1Pourquoi faut-il vérifier reponse.ok après un appel fetch ?
  2. 2Quelle option de curl affiche le code de statut et les en-têtes de réponse ?
  3. 3Quel en-tête faut-il envoyer lors d'un POST transportant un corps JSON ?
  4. 4Quel intérêt présente une variable d'environnement baseUrl dans un client graphique ?
  5. 5Pourquoi tester en priorité les cas d'échec d'une API ?
Répondez à toutes les questions pour valider.

API REST

Terminez le quiz du chapitre pour le marquer comme complété.

Tableau de bord

On this page