Qu'est-ce qu'une API REST ?

Mis à jour : septembre 2026

Une API REST est une API qui suit le style architectural REST : ressources à des URL, requêtes sans état et méthodes HTTP standard. REST — Representational State Transfer, défini dans la thèse de doctorat de Roy Fielding en 2000 — est un style, pas un protocole ni un standard : un ensemble de contraintes qui, honorées ensemble, produisent des API que tout le web sait déjà consommer, mettre en cache et mettre à l’échelle.

Points clés

QuestionRéponse
Le modèleRessources à des URL · représentations (généralement JSON) · méthodes standard
La sourceLa thèse de Fielding de 2000, chapitre 5 — un style architectural, pas une spec
Les six contraintesClient-serveur · sans état · cacheable · interface uniforme · en couches · code à la demande (optionnel)
Les verbesGET · POST · PUT · PATCH · DELETE — avec leur sémantique de sûreté et d’idempotence
La note honnêteLa plupart des API « REST » de production sont des API HTTP de niveau 2 — et c’est très bien

Un cycle CRUD complet en HTTP brut

Tout le style en quatre requêtes — voilà ce que chaque framework et SDK finit par envoyer :

POST /v1/posts                     →  201 Created            créer
{ "title": "Hello REST" }             Location: /v1/posts/8fk2

GET /v1/posts/8fk2                 →  200 OK                 lire
                                      { "title": "Hello REST", … }

PUT /v1/posts/8fk2                 →  200 OK                 remplacer
{ "title": "Hello again" }            (PATCH mettrait à jour des champs)

DELETE /v1/posts/8fk2              →  204 No Content         supprimer
GET /v1/posts/8fk2                 →  404 Not Found          …et il a disparu

Le même cycle à travers les SDK qui enveloppent les appels REST :

// JavaScript / Node.js — Back4app JS SDK
// The REST semantics, wrapped: create, read, update, delete
const post = new Parse.Object('Post');
post.set('title', 'Hello REST');
await post.save();                            // POST   /classes/Post      → 201

const fetched = await new Parse.Query('Post')
  .get(post.id);                              // GET    /classes/Post/:id  → 200

fetched.set('title', 'Hello again');
await fetched.save();                         // PUT    /classes/Post/:id  → 200

await fetched.destroy();                      // DELETE /classes/Post/:id  → 200

Les six contraintes de REST

  1. Client-serveur — interface et implémentation évoluent indépendamment ; l’UI ne sait jamais comment fonctionne le stockage.
  2. Sans état — chaque requête est autonome ; le serveur ne garde aucune session entre les appels, ce qui permet à n’importe quelle réplique de répondre à n’importe quelle requête.
  3. Cacheable — les réponses déclarent leur propre cacheabilité ; des GET avec de bons headers de cache mettent toute l’infrastructure de cache du web (navigateurs, CDN, proxys) au travail pour votre API.
  4. Interface uniforme — la contrainte qui est REST, en quatre parties : ressources identifiées par des URI ; manipulation via des représentations (vous renvoyez le JSON que la ressource doit devenir) ; messages autodescriptifs (méthode + headers disent tout ce qu’il faut pour traiter la requête) ; et hypermédia comme moteur de l’état de l’application (les réponses lient les actions suivantes).
  5. Système en couches — les clients ne peuvent pas savoir s’ils parlent à l’origine, à un cache ou à une gateway ; les intermédiaires s’insèrent librement.
  6. Code à la demande (optionnel) — les serveurs peuvent envoyer du code exécutable aux clients ; la seule contrainte marquée optionnelle, et celle que la plupart des API ignorent.

Méthodes HTTP : sûreté, idempotence, CRUD

Le tableau qui manque à presque toutes les pages bien classées — la sémantique du RFC 9110, condensée :

MéthodeRôle CRUDSûre ?Idempotente ?Réessayer à l’aveugle ?
GETLireOuiOuiOui
POSTCréerNonNonNon — peut dupliquer
PUTRemplacerNonOuiOui — même résultat
PATCHMise à jour partielleNonNon garantiDépend du design du patch
DELETESupprimerNonOuiOui — toujours supprimé

Sûre signifie que la requête ne change rien ; idempotente, que la répéter ne change rien de plus. Ce n’est pas de la culture générale — c’est la politique de retry : un timeout réseau sur un PUT se réessaie sans crainte, le même timeout sur un POST exige une clé d’idempotence ou un contrôle de doublons. Le mapping CRUD complet a sa propre entrée.

Codes de statut : quoi renvoyer, et quand

SituationRenvoyez
Lecture réussie200 OK
Ressource créée201 Created + header Location
Supprimé ; rien à dire204 No Content
Requête malformée400 Bad Request
Identifiants absents ou invalides401 Unauthorized
Authentifié mais non autorisé403 Forbidden
Ressource inexistante404 Not Found
Rate limit dépassé429 Too Many Requests (détails)
Panne du serveur500 Internal Server Error

Les distinctions 401/403 et 200/201/204 sont là où l’artisanat d’une API se voit : des codes précis rendent les clients débogables avec rien d’autre que la ligne de statut.

Votre API est-elle vraiment REST ? L’échelle de maturité

La section honnête que les explications commerciales omettent. Le Richardson Maturity Model note les API HTTP : niveau 0 (une URL, un verbe, du RPC déguisé), niveau 1 (des ressources à des URL), niveau 2 (méthodes et codes de statut corrects), niveau 3 (hypermédia — HATEOAS).

Richardson Maturity Model pour les API RESTQuatre niveaux depuis le niveau zéro, un simple tunnel HTTP, en passant par les ressources, puis les verbes HTTP et les codes de statut, jusqu'au niveau trois avec les contrôles hypermédia, la plupart des API de production vivant au niveau deux.

Niveau 0 — un endpoint, POST pour tout (RPC déguisé)

Niveau 1 — des ressources : /posts/8fk2

Niveau 2 — verbes + codes de statut ← la plupart des API de production vivent ici

Niveau 3 — hypermédia : les réponses lient les actions suivantes (HATEOAS)

Quatre niveaux depuis le niveau zéro, un simple tunnel HTTP, en passant par les ressources, puis les verbes HTTP et les codes de statut, jusqu'au niveau trois avec les contrôles hypermédia, la plupart des API de production vivant au niveau deux.

Sur l’insistance de Fielding lui-même, une API sans hypermédia n’est pas REST — il a écrit un essai acéré disant exactement cela. En pratique, presque chaque « API REST » acclamée est une API HTTP de niveau 2 : ressources, verbes, codes de statut, JSON, pas d’hypermédia. Cela compte moins comme pureté que comme vocabulaire — connaître l’échelle vous dit ce que le terme signifie dans une offre d’emploi (niveau 2) versus dans la thèse (niveau 3), et vous épargne à la fois le HATEOAS de cargo cult et les corrections pédantes.

REST vs. SOAP vs. GraphQL vs. gRPC

RESTSOAPGraphQLgRPC
NatureStyle architecturalProtocoleLangage de requêtes + runtimeFramework RPC
Sur le filJSON sur HTTPEnveloppes XMLJSON sur HTTP (un endpoint)Protobuf sur HTTP/2
ContratOpenAPI (convention)WSDL (obligatoire)Schéma (intégré).proto (obligatoire)
CacheNatif HTTP — son superpouvoirPauvreAu niveau applicatifAu niveau applicatif
Point fortCRUD public de ressourcesFormalisme enterprise/legacyDonnées imbriquées façonnées par le clientVitesse entre services internes
FaiblesseFormes fixes sujettes à l’over/underfetchingVerbositéComplexité du cache et des rate limitsFriction navigateur

La comparaison avec GraphQL a droit à une entrée complète.

Les conventions qui rendent une API REST agréable

Au-delà des contraintes, les conventions sur lesquelles les consommateurs vous notent en silence : des ressources au pluriel (/posts, pas /getPost) ; une imbrication d’un niveau maximum (/posts/8fk2/comments, puis stop) ; la pagination sur chaque collection — par curseur pour la profondeur et la stabilité, avec des limites appliquées ; le filtrage et le tri en paramètres de requête, pas en variantes d’endpoint ; le versionnage avec une politique explicite (chemin /v1/ ou header — choisissez-en un, publiez des fenêtres de dépréciation) ; la négociation de contenu respectée (Accept, Content-Type) ; et des erreurs en JSON structuré avec un code lisible par les machines, pas seulement de la prose. Rien de tout cela n’est dans la thèse ; tout est dans la différence entre une API que les développeurs recommandent et une qu’ils subissent.

Cas d’usage courants

  • API publiques et partenaires — l’ubiquité de REST est la fonctionnalité : chaque langage, outil et développeur le parle.
  • Backends d’apps mobiles et web — le CRUD de ressources sur HTTP correspond à la façon dont la plupart des écrans consomment réellement les données.
  • Frontières entre microservices — des contrats internes où l’outillage HTTP (gateways, tracing, cache) gagne sa place.
  • Intégrations façon webhook — des systèmes qui notifient des systèmes par de simples appels HTTP que les deux côtés comprennent déjà.
  • API de données générées automatiquement — les plateformes qui exposent une base de données comme ressources REST — le chemin le plus rapide du schéma à une API qui fonctionne.

Devriez-vous utiliser REST ? Matrice de décision

REST est le bon défaut quand…Cherchez autre chose quand…
API publique, consommateurs inconnusMaillage interne à haut débit → gRPC
Domaine CRUD en forme de ressourcesLes clients doivent façonner des réponses imbriquées → GraphQL
Le cache HTTP peut porter la charge de lecturePush bidirectionnel temps réel → WebSockets / live queries
La simplicité et l’étendue de l’outillage comptentContrats enterprise formels exigés → SOAP
Les écrans mappent proprement sur des ressourcesUn écran agrège cinq services → endpoint composite / BFF

Limites et trade-offs

  • Les représentations fixes ne vont pas à des clients divers. Le duo overfetching/underfetching est la faiblesse structurelle de REST ; les sparse fieldsets et les paramètres d’expansion atténuent, GraphQL redessine.
  • Aucun contrat obligatoire. Rien n’impose une spec OpenAPI, donc beaucoup d’API REST sont documentées par folklore ; la discipline est optionnelle là où gRPC et GraphQL la rendent structurelle.
  • L’absence d’état répète le contexte. L’auth et le contexte de tenant voyagent dans chaque requête — bon marché en octets, mais cela pousse la sémantique de session vers les tokens et rend certains flux (transactions en plusieurs étapes) inconfortables.
  • La tentation du N+1 par design. Penser ressource-par-URL invite aux clients à un-appel-par-élément ; les bonnes API livrent expansion et batch avant que les consommateurs n’improvisent des boucles.
  • Le mot « REST » est ambigu. API HTTP de niveau 2 dans la plupart des bouches, architecture hypermédia dans la thèse — lisez laquelle des deux une spec, une offre d’emploi ou un relecteur veut dire avant de débattre.

Les API REST sur Back4app

Back4app est une plateforme open-source de Backend as a Service (BaaS) qui combine une base de données gérée, des API REST et GraphQL générées automatiquement, l’authentification, le stockage de fichiers et des fonctions serverless avec Cloud Code. L’API REST ici est générée, pas construite : chaque classe de votre modèle de données est immédiatement une ressource — POST /classes/Post crée, GET /classes/Post/:id lit, avec les méthodes, les codes de statut et la sémantique de Location du parcours ci-dessus — derrière des clés, des tokens d’utilisateur et des permissions au niveau des classes qui font respecter la frontière. Les onglets de code montrent le même cycle à travers les SDK, qui sont de minces enveloppes idiomatiques sur exactement ce HTTP ; quand une opération dépasse le CRUD, une fonction Cloud Code ajoute un endpoint sur mesure dans un fichier. Du REST de niveau 2, correct par défaut, du schéma à l’URL le temps de définir la classe.

Questions fréquentes

Qu'est-ce qu'une API REST en termes simples ?

Une façon pour deux applications de se parler sur HTTP avec des conventions que tout le monde connaît déjà : chaque chose (un utilisateur, une commande) vit à une URL, vous agissez dessus avec un verbe standard — GET pour lire, POST pour créer, PUT ou PATCH pour mettre à jour, DELETE pour supprimer — et chaque requête se suffit à elle-même, portant tout ce dont le serveur a besoin pour y répondre.

Que signifie REST ?

Representational State Transfer — transfert d'état représentationnel — issu de la thèse de doctorat de Roy Fielding en 2000. Le nom décrit le mécanisme : le serveur transfère au client une représentation de l'état d'une ressource (généralement du JSON), et le client fait passer l'application d'état en état à travers ces représentations.

Quelle est la différence entre REST et RESTful ?

Dans l'usage courant, aucune — les termes sont interchangeables. Pour être pédant, REST nomme le style architectural et RESTful est l'adjectif pour une API qui l'implémente. L'affirmation qui circule selon laquelle « RESTful suit toutes les règles et REST seulement certaines » n'a aucun fondement dans le travail de Fielding.

Quelles sont les six contraintes de REST ?

Séparation client-serveur, absence d'état, cacheabilité, interface uniforme, système en couches et — en option — code à la demande. L'interface uniforme se décompose elle-même en quatre règles : ressources identifiées par des URI, manipulation via des représentations, messages autodescriptifs et hypermédia comme moteur de l'état de l'application.

Quelle est la différence entre PUT et POST ?

Idempotence et adressage. POST crée sous une collection — le serveur assigne l'URL, et répéter la requête crée des doublons. PUT écrit une représentation complète à une URL connue — le répéter produit le même état, ce qui rend les retries sûrs. Cette différence de sûreté, pas le style, est la raison pour laquelle la distinction compte.

Une API REST doit-elle utiliser JSON ?

Non. REST est agnostique au format — une ressource peut être représentée en JSON, XML, HTML ou comme une image, négociée via les headers Accept et Content-Type. JSON est simplement le choix par défaut moderne parce que chaque client le parse à bas coût. La contrainte porte sur les représentations, pas sur l'une en particulier.

Que signifie sans état (stateless) dans une API REST ?

Le serveur ne garde aucune mémoire du client entre les requêtes : chaque requête porte tout ce qu'il faut pour la traiter, y compris les identifiants comme un bearer token. Le gain, c'est la mise à l'échelle horizontale — n'importe quel serveur peut répondre à n'importe quelle requête — et le coût, quelques octets de contexte répétés à chaque appel.

Qu'est-ce que HATEOAS ?

Hypermedia As The Engine Of Application State : les réponses incluent des liens vers les actions disponibles ensuite, de sorte que les clients naviguent dans l'API comme les gens naviguent sur le web — en suivant des liens plutôt qu'en codant les URL en dur. C'est la contrainte la moins implémentée ; la plupart des API « REST » de production la sautent et vivent heureuses au niveau 2 du modèle de maturité.

Termes associés

À comparer avec

Lectures recommandées

Prêt à construire votre backend ?

Lancez votre projet sur Back4app en quelques minutes — base de données, authentification, API et Cloud Code inclus. Sans carte bancaire.

Écrit et révisé par Back4app Engineering, Back4app Engineering · Publié le 2026-09-08