JM Informatique

API REST : comprendre et consommer une API sans se perdre

REST n'est ni une techno ni un protocole, mais un style architectural — et la plupart des tutos ratent l'essentiel : l'appel réel. Découvrez comment consommer une API sans les pièges qui font planter vos scripts en production.

API REST : comprendre et consommer une API sans se perdre

Vous tapez sur une URL qui finit par /users/42/repos, vous recevez une liste de dépôts GitHub au format JSON, et votre script affiche les noms. Pas de navigateur, pas de clic humain. C'est ça, consommer une API REST. Et si je commence par cet exemple précis, c'est parce qu'il cristallise tout ce que les tutos ratent : on vous explique pendant 2 000 mots ce qu'est REST, puis on vous lâche au moment où il faut vraiment faire l'appel.

L'autre moitié du problème, c'est le vocabulaire. API REST, RESTful, API Web, endpoint, ressource… On empile les termes sans jamais dire lequel désigne quoi. Je vais être direct : une bonne partie de ces mots sont interchangeables, et les confusions viennent souvent de gens qui répètent une définition apprise sans jamais avoir lu une réponse HTTP avec un code 429.

Points clés à retenir

  • REST est un style architectural décrit par Roy Fielding en 2000, pas une technologie ni un protocole.
  • Une API « REST » au sens strict respecte des contraintes précises ; en pratique, beaucoup d'API dites REST ne le sont que partiellement.
  • Consommer une API se résume à : construire une requête HTTP, l'envoyer, lire le code de statut, parser le corps.
  • Les codes de statut vous disent quoi faire bien mieux qu'un message d'erreur — apprenez à les lire en priorité.
  • L'authentification par clé API est simple, OAuth 2 est plus lourd mais nécessaire dès qu'un tiers agit au nom d'un utilisateur.
  • La pagination et les quotas sont les deux pièges qui font planter un script en production après l'avoir fait marcher en local.

API REST : la définition qu'on aurait dû vous donner tout de suite

Une API est une interface : un ensemble de règles qui permet à un programme d'en appeler un autre sans connaître son fonctionnement interne. Rien de plus. Une API REST est une API qui suit le style architectural REST pour exposer ses fonctionnalités.

Et là, la nuance que 90 % des articles zappent.

REST est un style, pas une norme

Roy Fielding a décrit REST dans sa thèse de doctorat, en 2000. Il a formulé six contraintes. Le respect de toutes ces contraintes fait d'une API une API REST au sens strict. Le respect de quelques-unes fait une API « RESTish » — ce qu'on croise en réalité chez la grande majorité des fournisseurs.

Les contraintes qui pèsent le plus dans la pratique :

  • Une architecture client-serveur, avec séparation des responsabilités.
  • Une communication sans état (stateless) : chaque requête porte tout ce qu'il faut pour être comprise.
  • Une interface uniforme, où les ressources sont identifiées par des URI et manipulées avec un jeu d'opérations standard.
  • Un système en couches, où le client ne sait pas s'il parle au serveur final ou à un intermédiaire.

Cette histoire de stateless est celle qui change le plus votre code. Si le serveur ne garde aucune mémoire de votre session, vous devez renvoyer à chaque appel tout ce qui identifie votre contexte : un jeton, un identifiant, une clé. Vous ne pouvez pas « vous connecter une fois » et enchaîner tranquillement.

Quelle est la différence entre API et API REST ?

Une API est le genre, une API REST est une espèce. Toutes les API REST sont des API, l'inverse est faux. Une API peut très bien s'appuyer sur SOAP, sur GraphQL, sur gRPC, ou sur un protocole maison sans le moindre rapport avec HTTP. Quand on parle d'API REST, on parle presque toujours d'API qui utilisent HTTP comme transport, avec des URL comme identifiants de ressources et des verbes HTTP comme opérations.

Comment ça marche vraiment : une requête, une réponse, un code

Oubliez la théorie un instant. Une requête HTTP vers une API REST contient toujours quatre éléments : une méthode (GET, POST, PUT, PATCH, DELETE), une URL, des en-têtes (headers), et parfois un corps (body). La réponse contient un code de statut, des en-têtes, et un corps — le plus souvent en JSON, parfois en XML.

Comment ça marche vraiment : une requête, une réponse, un code

C'est tout. Si vous avez compris ça, vous savez lire n'importe quelle documentation d'API. Le reste est du remplissage.

Les codes de statut : votre meilleur outil de debug

Je vois régulièrement des développeurs qui passent 40 minutes à chercher pourquoi un appel échoue, en regardant le corps de la réponse, alors que l'en-tête HTTP affiche un code 401. Lisez toujours le code en premier.

Les codes à connaître par cœur
CodeSignificationCe que vous devez faire
200OKLire le corps, c'est bon.
201CreatedUne ressource a été créée ; son URL est souvent dans l'en-tête Location.
400Bad RequestLe corps envoyé est probablement mal formé ou un champ obligatoire manque.
401UnauthorizedLe jeton ou la clé manque, ou est invalide.
403ForbiddenAuthentifié mais pas autorisé pour cette ressource précise.
404Not FoundL'URL ne correspond à rien côté serveur.
429Too Many RequestsVous avez dépassé le quota. Lisez l'en-tête Retry-After.
500Internal Server ErrorBug côté serveur. Retentez avec un backoff, puis remontez le problème.

Le 429 est celui qui m'a coûté le plus cher. J'avais écrit un script de synchronisation qui tournait toutes les nuits, sans limitation de débit. Semaine 1 : tout va bien. Semaine 3 : l'API renvoie des 429 en série, le script se plante, et je ne m'en rends compte qu'en découvrant un tableau de bord vide le lundi matin. Depuis, je code systématiquement trois retries avec un backoff exponentiel, et j'ai arrêté de croire que « ça marche en local » veut dire quoi que ce soit.

Consommer une API REST : le guide pratique

Consommer, c'est le verbe qui manque à la plupart des articles sur le sujet. Ils expliquent la conception, l'exposition côté serveur, mais rarement l'appel côté client. Voilà donc concrètement comment on fait.

Trois façons d'appeler une API, du plus nu au plus habillé

En ligne de commande, avec curl. Idéal pour tester un endpoint avant d'écrire une seule ligne de code :

curl -H "Authorization: Bearer VOTRE_JETON" \
     https://api.example.com/users/42/repos

En JavaScript côté navigateur, avec fetch. Pas de bibliothèque externe :

const reponse = await fetch(
  "https://api.example.com/users/42/repos",
  { headers: { Authorization: "Bearer " + jeton } }
);
if (!reponse.ok) throw new Error("Code " + reponse.status);
const donnees = await reponse.json();

En Python, avec la bibliothèque requests. Le plus lisible pour un script d'automatisation :

import requests
r = requests.get(
    "https://api.example.com/users/42/repos",
    headers={"Authorization": f"Bearer {jeton}"}
)
r.raise_for_status()
donnees = r.json()

Remarquez qu'aucun de ces trois exemples ne vous dit quelle URL appeler. Ça, c'est le rôle de la documentation de chaque API. Aucune recette magique ne remplace la lecture du schéma.

Authentification : clé API ou OAuth 2 ?

La clé API, c'est une simple chaîne de caractères que vous collez dans un en-tête. Cinq minutes pour la mettre en place, parfait pour un service à service, à condition de ne jamais la mettre dans du code côté client — elle serait visible dans les outils du navigateur en deux clics.

OAuth 2 devient nécessaire dès qu'une application agit au nom d'un utilisateur. Un jeton d'accès révocable, des scopes, un flux de redirection : c'est plus complexe, mais c'est ce qui permet à un utilisateur de retirer un accès sans changer son mot de passe. Si votre intégration doit s'authentifier avec les comptes de vos utilisateurs, vous finirez par passer par OAuth 2. Autant le savoir tôt.

Pagination et quotas : les deux pièges cachés

Une API ne vous renverra jamais 50 000 résultats d'un coup. Elle pagine. Selon les fournisseurs, vous trouverez des paramètres comme ?page=2&per_page=100, ou un curseur opaque fourni dans la réponse. Le second cas est plus courant sur les grosses API, parce qu'il résiste mieux aux insertions de données pendant que vous parcourez les pages.

Le piège classique : boucler sur les pages en incrémentant jusqu'à retomber sur une page vide, en espérant tomber juste. Mauvaise stratégie. Lisez la documentation, identifiez le champ qui signale une page suivante (souvent next ou Link), et arrêtez-vous quand il disparaît.

Sur les quotas, j'ai un chiffre concret : sur un projet où j'appelais une API de facturation en boucle pour rafraîchir un écran, je consommais 18 000 requêtes par jour pour un usage réel d'environ 200. La solution n'était pas technique, elle était produit : mettre en cache les réponses pendant 10 minutes. La consommation est tombée du jour au lendemain. Beaucoup de problèmes de quotas sont en réalité des problèmes de design.

API REST ou SOAP : laquelle choisir ?

SOAP est un protocole avec un contrat strict — WSDL —, un format XML obligatoire, et une lourdeur assumée. REST est un style, avec des formats libres et une légèreté par défaut. SOAP reste pertinent dans quelques niches : la banque, l'assurance, les systèmes industriels où la validation stricte du contrat et la traçabilité sont plus importantes que la vitesse de développement.

Pour tout le reste, REST a gagné. Et ce n'est pas un hasard : un développeur peut appeler une API REST avec curl la première fois qu'il en entend parler. Personne ne fait ça avec SOAP.

Un mot sur GraphQL, puisque la question arrive souvent : c'est une alternative qui corrige certains défauts de REST, notamment le sur-fetch (recevoir 40 champs quand on en veut 3). Mais elle déplace la complexité côté serveur, et pour un usage simple, REST reste plus direct.

Ce que j'aurais aimé savoir en commençant

Trois erreurs qui m'ont coûté du temps, et que je vois se répéter autour de moi.

Confondre URL et ressource. L'URL /users/42/repos ne désigne pas un dossier. C'est un identifiant unique pour une collection de ressources, calculée à chaque appel. Si vous raisonnez en arborescence de fichiers, vous allez chercher des comportements qui n'existent pas.

Ignorer les en-têtes de réponse. Les informations les plus utiles — quota restant, format attendu, lien vers la page suivante — sont souvent dans les en-têtes, pas dans le corps. Prenez l'habitude de les afficher en développement.

Ne pas tester les cas d'erreur. Un script qui ne gère que le cas nominal se plante silencieusement à la première exception. Forcez une 404, forcez une 401, forcez une 429, et regardez ce que fait votre code. C'est dix minutes d'investissement pour des heures de debug économisées.

Ce qui reste, au fond, c'est une chose simple : une API REST, ce n'est pas une technologie à apprendre, c'est une convention à lire. Le meilleur investissement de votre semaine n'est pas un nouveau framework, c'est de passer une heure à lire la documentation d'une API que vous utilisez déjà tous les jours. Vous y trouverez presque toujours un endpoint que vous auriez payé cher pour connaître.

Amandine Turpin

Amandine Turpin

Amandine Turpin est une experte reconnue en développement web, en architecture logicielle et en DevOps. Elle accompagne les équipes techniques dans la conception de systèmes robustes et évolutifs, en alliant exigence de qualité et pragmatisme. Passionnée par la transmission, elle aime partager ses connaissances et rendre les sujets complexes accessibles.

Voir tous les articles →

Articles similaires