cours-api-rest.docx

LES API REST

Cours complet pour débutants

Basé sur le cours OpenClassrooms — Adoptez les API REST pour vos projets web

🎯 À qui s'adresse ce cours ? À toi, débutant·e complet·e, qui n'a jamais travaillé ce sujet mais qui veut comprendre les notions clés sans ambiguïté. Les exemples sont volontairement simples et concrets.

PARTIE 1 — Comprendre ce qu'est une API

1.1 C'est quoi une API ?

API signifie Application Programming Interface (Interface de Programmation d'Application).

🍽️ Imagine que tu es au restaurant. Tu ne vas pas toi-même en cuisine chercher ta nourriture. Tu passes par la serveuse, qui transmet ta commande à la cuisine, puis te ramène ton plat. La serveuse, c'est l'API.

En informatique, voici les 3 rôles :

  • Toi (le client) = ton navigateur, ton appli mobile, ton code
  • La serveuse (l'API) = l'interface qui fait le lien
  • La cuisine (le serveur/base de données) = l'endroit où sont stockées les données

✅ En résumé : une API permet à deux applications de communiquer entre elles, sans que l'une ait besoin de connaître le fonctionnement interne de l'autre.

Exemples concrets :

  • Tu cherches un vol sur Google Flights → Google utilise des API des compagnies aériennes pour afficher leurs tarifs.
  • Tu te connectes à un site avec ton compte Google → le site utilise l'API de Google.
  • L'application météo sur ton téléphone récupère les données via une API météo.

1.2 API privée vs API publique

Type

Qui peut l'utiliser ?

Exemple

API publique

N'importe quel développeur

API Twitter, GitHub, Météo

API privée

Seulement les personnes autorisées dans une app/entreprise

L'API interne de ta base de données

🔐 Une API privée ajoute une couche de sécurité : elle évite que n'importe qui accède ou modifie directement ta base de données.

1.3 Pourquoi utiliser une API ?

  • Sécurité : Sécurité

La base de données n'est pas exposée directement.

  • Standardisation : Standardisation

Tout le monde parle le même langage via l'API (front-end, mobile, partenaires externes).

  • Réutilisabilité : Réutilisabilité

Une seule API peut servir à plusieurs applications en même temps.

PARTIE 2 — REST, c'est quoi ?

2.1 Définition

REST = REpresentational State Transfer (Transfert d'état de représentation)

C'est un ensemble de règles architecturales qui définissent comment une API doit se comporter. Ce n'est pas un langage, ni un outil — c'est une façon de concevoir une API.

📊 En 2017, 83 % des API dans le monde étaient des API REST. C'est le standard dominant.

2.2 Les 6 principes fondamentaux de REST

1. Séparation client / serveur

Le client (qui affiche les données) et le serveur (qui les stocke) sont indépendants. L'un peut changer sans impacter l'autre.

2. Sans état — Stateless 🧠 (le plus important !)

Chaque requête envoyée à l'API est complète et indépendante. Le serveur ne se souvient pas des requêtes précédentes.

⚠️ Si la serveuse est "stateless" et que tu lui demandes "Je voudrais du ketchup avec" — elle ne sait pas avec quoi ! Car elle ne se souvient pas que tu viens de commander des frites. Tu dois toujours tout re-préciser à chaque requête.

3. Mise en cache (Cacheable)

Les réponses peuvent être mises en cache côté client pour éviter des requêtes inutiles et aller plus vite.

4. Interface uniforme

La communication entre client et serveur se fait toujours de la même façon standardisée (via des URL + verbes HTTP).

5. Système en couches (Layered System)

Le client ne sait pas s'il parle directement au serveur ou à un intermédiaire (pare-feu, équilibreur de charge...).

6. Code à la demande (optionnel)

Le serveur peut envoyer du code exécutable au client. C'est rare et optionnel.

PARTIE 3 — Les concepts clés d'une API REST

3.1 Ressource et Collection

Une ressource est un objet représenté par un nom. C'est l'unité de base des données dans une API REST.

🛹 Exemple : pour une boutique de skateboards, les ressources pourraient être : Skateboard, Commande, Client, Inventaire.

Une ressource a des attributs (informations supplémentaires). Exemple — un Skateboard a :

  • un id
  • un nom
  • une marque
  • un prix

Une collection est un ensemble de ressources du même type :

/skateboards → la collection de tous les skateboards

/skateboards/42 → la ressource "skateboard numéro 42"

📌 Convention importante : les noms de ressources et de collections s'écrivent en anglais, au pluriel.

3.2 URI, URL et Endpoint

Terme

Signification

Exemple

URI

Identifiant d'une ressource (comme une étiquette)

/skateboards/42

URL

URI avec l'adresse complète (nom de domaine inclus)

https://api.monsite.com/skateboards/42

Endpoint

L'URL complète utilisée pour faire une requête à l'API

https://api.monsite.com/users/:id

https://api.monsite.com/skateboards/42

|_________________________||________|

Nom de domaine (base URL) Path vers la ressource

✅ Règle d'or : dans un endpoint, utilise des noms (les ressources), jamais des verbes. L'action est portée par le verbe HTTP.

❌ Mauvais : /getSkateboards ou /createSkateboard

✅ Bon : /skateboards (le verbe HTTP dira ce qu'on veut faire)

3.3 Le format des données : JSON

Les données échangées via une API REST peuvent être formatées en JSON (le plus utilisé) ou en XML (plus ancien).

// JSON — le standard actuel

{

"id": 42,

"nom": "Pro Deck",

"marque": "Element",

"prix": 79.99

}

✅ JSON est plus léger, plus lisible et plus facile à utiliser en JavaScript. C'est le standard actuel des API REST.

PARTIE 4 — Faire des requêtes à une API

4.1 Les verbes HTTP et le CRUD

Pour agir sur les ressources, on utilise des verbes HTTP. Ils correspondent aux 4 opérations de base : le CRUD.

CRUD

Verbe HTTP

Action

Exemple

Create (Créer)

POST

Créer une nouvelle ressource

Ajouter un skateboard

Read (Lire)

GET

Récupérer des données

Voir la liste des skateboards

Update (Modifier)

PUT / PATCH

Modifier une ressource existante

Changer le prix

Delete (Supprimer)

DELETE

Supprimer une ressource

Retirer un skateboard

ℹ️ Différence PUT vs PATCH : PUT remplace toute la ressource. PATCH ne modifie qu'une partie seulement.

4.2 La structure d'une requête HTTP

Une requête envoyée à une API contient :

  • Le verbe HTTP : GET, POST, PUT, DELETE...
  • L'endpoint (l'URL) : https://api.github.com/users/monpseudo
  • Les headers : informations de contexte (format souhaité, token d'authentification...)
  • Le body (optionnel) : les données envoyées avec la requête (pour POST et PUT notamment)

4.3 Les codes de réponse HTTP

Le serveur répond toujours avec un code de statut qui indique si la requête a réussi ou non :

Code

Signification

Quand ?

200 OK

Succès

Requête GET réussie

201 Created

Ressource créée

Requête POST réussie

204 No Content

Succès, pas de contenu à renvoyer

DELETE ou PUT réussi

400 Bad Request

Requête mal formée

Paramètre manquant ou mal formaté

401 Unauthorized

Non authentifié

Token manquant ou invalide

403 Forbidden

Non autorisé

Tu n'as pas les droits

404 Not Found

Ressource introuvable

L'ID n'existe pas

500 Internal Server Error

Erreur côté serveur

Problème de code côté serveur

🧠 Mémo : codes 2xx = succès | codes 4xx = erreur du client | codes 5xx = erreur du serveur

PARTIE 5 — Utiliser une API externe en pratique

5.1 Lire la documentation

Avant d'utiliser une API, tu dois lire sa documentation. C'est le manuel d'utilisation. Elle indique :

  • Les endpoints disponibles
  • Les verbes HTTP à utiliser
  • Les paramètres obligatoires ou optionnels
  • Des exemples de requêtes et de réponses
  • Les codes d'erreur possibles

📖 Sans documentation, une API est inutilisable. Toujours commencer par là !

5.2 Les paramètres d'une requête

Query parameters (dans l'URL) — pour filtrer, trier, paginer

GET /skateboards?marque=Element&prix_max=100

Path parameters (dans le chemin) — pour cibler une ressource précise

GET /skateboards/42

5.3 L'authentification avec un token

Certaines API nécessitent une authentification. La méthode la plus courante est le token (jeton).

Comment ça fonctionne :

  • Tu te connectes avec tes identifiants → l'API te donne un token (une longue chaîne de caractères)
  • Tu envoies ce token dans le header de chaque requête suivante
  • L'API vérifie le token → si valide, elle répond ; sinon, elle renvoie 401 Unauthorized

// Exemple de header d'authentification :

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

🔑 JWT (JSON Web Token) = le format de token le plus répandu. Il contient des informations encodées sur l'utilisateur. C'est cohérent avec le principe stateless : chaque requête se suffit à elle-même grâce au token.

5.4 Tester une API avec Postman

Postman est un outil gratuit qui permet de faire des requêtes à une API sans écrire de code. Idéal pour tester et déboguer.

Avec Postman, tu peux :

  • Choisir le verbe HTTP (GET, POST...)
  • Saisir l'endpoint
  • Ajouter des headers (token d'authentification...)
  • Rédiger un body (pour POST/PUT)
  • Voir la réponse et le code de statut

PARTIE 6 — Créer sa propre API REST

6.1 Quand créer sa propre API ?

Il existe deux grandes raisons :

  • Pour ton application : tu veux une couche API entre ta base de données et ton interface utilisateur (sécurité + organisation).
  • Pour des tiers : tu veux que d'autres développeurs puissent utiliser tes données.

6.2 Bien concevoir ses endpoints (avant de coder !)

✏️ Avant d'écrire une seule ligne de code, réfléchis à l'architecture de ton API sur papier. Une bonne conception dès le départ évite de nombreuses erreurs.

Les 4 questions à se poser :

  • Quelles sont mes ressources ? (ex: users, photos, comments)
  • Quelles opérations CRUD sont nécessaires pour chacune ?
  • Y a-t-il des ressources imbriquées ? (ex: un commentaire appartient à une photo)
  • Quels endpoints nécessitent une authentification ?

Exemple concret — app de partage de photos (InstaPhoto) :

GET /photos → Voir toutes les photos (public)

POST /photos → Créer une photo (auth requise)

GET /photos/:id → Voir une photo (public)

DELETE /photos/:id → Supprimer une photo (auth requise)

GET /photos/:id/comments → Voir les commentaires (public)

POST /photos/:id/comments → Ajouter un commentaire (auth requise)

GET /users/:id → Voir un profil (public)

PUT /users/:id → Modifier son profil (auth requise)

6.3 La gestion des erreurs

Une bonne API doit toujours expliquer ses erreurs clairement. Quand quelque chose échoue, renvoie :

  • Le bon code HTTP (404, 401...)
  • Un message explicite dans le body

{

"message": "Requires authentication",

"documentation_url": "https://monapi.com/docs/auth"

}

6.4 Bonnes pratiques supplémentaires

Le filtrage, tri et pagination

Quand une collection peut contenir des milliers de ressources, on ne les renvoie pas toutes d'un coup :

GET /skateboards?sort=prix&order=asc&page=2&limit=20

Le versionnage

Pour ne pas casser les applications qui utilisent ton API quand tu la fais évoluer :

https://api.monsite.com/v1/skateboards

https://api.monsite.com/v2/skateboards

La documentation

Une API sans documentation est inutilisable. Elle doit décrire chaque endpoint, ses paramètres, ses exemples de réponse et ses erreurs possibles.

6.5 Les frameworks pour construire une API REST

Framework

Langage

Caractéristiques

Express

JavaScript (Node.js)

Léger, flexible, très populaire

Django REST

Python

Fonctionnalités intégrées, utilisé par Google/Instagram

Ruby on Rails

Ruby

"Magique", grande communauté

Spring Boot

Java

Robuste, utilisé en entreprise

AWS API Gateway

(Interface)

Moins de code, payant par requête

📋 RÉCAPITULATIF — Les notions essentielles

Notion

Définition rapide

API

Interface qui fait le lien entre deux applications

REST

Ensemble de règles pour concevoir une API web

Stateless

Chaque requête est indépendante, le serveur n'a pas de mémoire

Ressource

Un objet de données nommé (ex: un utilisateur, une photo)

Collection

Un ensemble de ressources du même type

URI / Endpoint

L'adresse pour accéder à une ressource

Verbe HTTP

L'action à effectuer (GET, POST, PUT, DELETE)

CRUD

Create, Read, Update, Delete — les 4 opérations de base

JSON

Format de données léger et lisible, standard des API REST

Code HTTP

Numéro indiquant le résultat de la requête (200, 404, 401...)

Token / JWT

Jeton d'authentification envoyé dans chaque requête

Postman

Outil pour tester des API sans coder

Documentation

Manuel d'utilisation indispensable de toute API