Le modèle Web à trois couches — la répartition entre Web, application et base de données

Cet article fait partie du cours Les bases de l'informatique, qui construit depuis zéro les connaissances informatiques pratiques indispensables pour programmer et faire du vibe coding.
Frontend et backend sont deux autres noms pour l'une des trois couches : Web, application et base de données. Des schémas montrent comment une requête traverse les couches.

Cet article traite du modèle Web à trois couches.

C'est une façon de voir une application web comme trois rôles : Web, application et base de données.

Le frontend et le backend des livres pour débutants sont d'autres noms pour l'une de ces trois couches.

Correspondance entre les termes des livres pour débutants et les trois couches
===FrontendBackendBase de donnéesCouche WebCouche AppCouche BDDAffichage etsaisies reçuesDécisions et calculsordres lecture/écritureStockage etlecture de donnéesRequêteLecture/écriture
La ligne du haut contient les termes des livres et des cours pour débutants, la ligne du milieu les noms utilisés dans cet article, et la ligne du bas ce dont chaque couche s'occupe. Les deux cases reliées par un double trait désignent la même chose sous deux noms différents.

Le texte emploie les noms complets ; faute de place, les schémas abrègent en couche Web, couche App et couche BDD.

Le modèle à trois couches découpe une seule application en rôles Web, application et base de données

Le modèle à trois couches (three-tier architecture : une structure bâtie sur trois rôles, Web, application et base de données) est la forme de base d'une application web, et chacune des parties séparées s'appelle une couche (tier).

Nom dans cet articleTerme anglaisCe dont elle s'occupeNom dans les livres pour débutants
Couche serveur Webpresentation tierRenvoie les fichiers de l'écranFrontend
Couche Appapplication tierDécide et calculeBackend
Couche BDDdata tierStocke et lit les donnéesBase de données

Les fichiers renvoyés par la couche serveur Web sont exécutés par le navigateur de l'utilisateur, qui dessine l'écran.

La structure elle-même — en quelles parties tu découpes une application et comment tu les relies — est l'architecture, et l'« architecture trois couches » des livres pour débutants désigne la même chose que le modèle à trois couches de cet article.

Le contenu d'un seul my-app
my-app (appli de réservation pour membres)
Couche Web (frontend)
  • Affiche le formulaire et la liste des réservations
  • Reçoit une saisie du type 12/24 18:00, 2 personnes
  • S'exécute dans le navigateur de l'utilisateur
Couche App (backend)
  • Vérifie si le 12/24 18:00 est libre
  • Confirme la réservation et renvoie le résultat à la couche serveur Web
  • S'exécute sur le serveur
Couche BDD (base de données)
  • Enregistre les réservations et les données des membres
  • Lit et renvoie les enregistrements demandés
  • Se trouve sur le serveur de base de données
Le cadre extérieur est un seul my-app. Les trois cases à l'intérieur sont les couches, rangées depuis le haut selon leur proximité avec l'utilisateur. Les puces indiquent ce dont chaque couche s'occupe dans l'application de réservation.

Les trois couches vont du haut vers le bas, de la plus proche de l'utilisateur à la plus éloignée.

La seule chose que l'utilisateur manipule directement est l'écran renvoyé par la couche serveur Web, les deux autres restent invisibles.

L'écran renvoyé par la couche serveur Web s'exécute dans le navigateur, un par utilisateur.

Avec trois utilisateurs il y a trois écrans, et les trois se partagent les deux couches restantes.

Les trois écrans de gauche tournent chacun sur un ordinateur ou un téléphone différent.

Entre A et B, qui ont choisi la même heure, celui qui est traité en second se voit refuser sa réservation parce que les enregistrements sont regroupés dans une seule couche base de données.

Quel que soit le nombre d'écrans, il n'y a qu'une destination et qu'un seul jeu d'enregistrements.

Le modèle à trois couches répartit le travail à l'intérieur d'une seule application

Le modèle à trois couches est une façon de découper une seule application en trois responsabilités : Web, application et base de données.

Le frontend des livres pour débutants correspond à la couche serveur Web et le backend à la couche serveur d'application ; l'écran renvoyé par la couche serveur Web existe en un exemplaire par utilisateur, tandis qu'une seule couche serveur d'application et une seule couche base de données servent tout le monde.

Pourquoi découper en couches — un seul endroit à corriger, un seul endroit pour décider pour tous

Il y a deux raisons de découper.

La première : quand tu veux changer quelque chose, l'endroit à corriger tient dans une seule couche.

Un même changement touche une zone différente selon le découpage
Changer la couleurdu boutonDécoupé en couchescorriger la couche WebTout en un blocchercher la couleurCouches App et BDDintactesRevérifier lestraitements non liés
En haut, ce que tu veux changer. À gauche, le cas où c'est découpé en couches ; à droite, le cas où tout est d'un seul bloc. La ligne du bas indique ce qu'il faut revérifier dans chaque cas.

Si c'est découpé, la seule chose que tu touches est un fichier de la couche serveur Web.

Si tout est d'un seul bloc, tu cherches d'abord l'endroit qui fixe la couleur, puis tu revérifies que les traitements sans rapport fonctionnent toujours.

La seconde : il faut un endroit qui juge les demandes de tout le monde ensemble et qui enregistre le résultat.

L'écran renvoyé par la couche serveur Web s'exécute dans le navigateur d'un seul utilisateur et ignore ce que les autres ont saisi.

Les règles de ces décisions propres à l'application forment la logique métier (business logic), et elles se placent dans la couche serveur d'application.

Ce que vérifie la couche serveur Web et les règles placées dans la couche serveur d'application
my-app (appli de réservation pour membres)
Vérifié sur l'écran
  • Si le champ de date a été envoyé vide
  • Si le nombre de personnes est bien un nombre
  • Peut prévenir sur place, avant l'envoi
Règles dans la couche App (logique métier)
  • Si des réservations se chevauchent au 12/24 18:00
  • Si le membre dépasse son nombre de réservations
  • Peut décider après avoir lu les enregistrements de tous
Le cadre extérieur est un seul my-app. Le cadre du haut contient ce que la couche serveur Web vérifie sur place ; celui du bas, la logique métier placée dans la couche serveur d'application.

Même l'écran renvoyé par la couche serveur Web vérifie certaines choses, comme le fait que le champ de date ne soit pas vide.

Mais cette vérification est faite par un fichier arrivé dans le navigateur de l'utilisateur, donc celui-ci peut le modifier ou sauter la vérification.

C'est pourquoi la couche serveur d'application vérifie les mêmes choses une seconde fois.

Prenons le cas où deux personnes envoient le même 12/24 18:00 au même moment, et comparons comment le résultat change selon la couche où l'on place cette décision.

La différence est ce que l'on regarde au moment de décider.

Le côté écran ne regarde que la liste de son propre navigateur, tandis que la couche serveur d'application lit les enregistrements de tout le monde avant de décider.

Côté écran, les utilisateurs A et B ne voient chacun que leur propre liste, donc tous les deux concluent que le créneau est libre.

Dans la couche serveur d'application, toutes les requêtes arrivent au même endroit et elle peut lire les enregistrements puis vérifier les demandes une par une.

Découper, c'est pour l'endroit où l'on corrige et l'endroit où l'on décide

Si tu as découpé en couches, tu n'as qu'un seul endroit à toucher quand tu veux corriger quelque chose.

L'autre raison est qu'il faut voir et décider pour tout le monde au même endroit : comme les écrans sont séparés par utilisateur, ils ne savent pas ce que les autres ont envoyé.

Comment les données traversent les couches avant qu'une réservation soit enregistrée

La couche serveur Web et la couche serveur d'application sont reliées par des requêtes et des réponses ; la couche serveur d'application et la couche base de données sont reliées par des ordres de lecture et d'écriture.

CoucheCe qu'elle y faitDestinataireCe qu'elle transmet
Couche WebReçoit la saisieCouche App12/24 18:00, 2 personnes
Couche AppVérifie si c'est libreCouche BDDOrdre de lire les réservations du jour
Couche BDDLit les enregistrementsCouche App0 réservation le 12/24

Chaque couche fait uniquement son travail et passe à la suivante.

La couche serveur Web ne se connecte jamais directement à la couche base de données ; la couche serveur d'application se place toujours entre les deux.

Une fois les enregistrements revenus de la couche base de données, la couche serveur d'application décide du résultat.

Le chemin se divise en deux à la couche serveur d'application, et une seule réponse revient
12/24 18:00requête, 2 pers.Couche Applit les donnéesCréneau libre→ écrireDéjà 1 réservation→ ne pas écrireRéponse renvoyéeà la couche Web
Une requête arrive de la gauche et se divise vers le haut ou vers le bas selon ce qu'a montré la lecture des enregistrements. Même quand elle se divise, une seule réponse repart vers la couche serveur Web.

Quelle que soit la branche, une seule réponse repart vers la couche serveur Web.

Ces trois couches sont la forme de base retenue dans cet article, et les applications réelles comportent des exceptions.

Certaines configurations se connectent directement à un service externe au lieu de construire soi-même une couche serveur d'application, et dans d'autres la couche serveur d'application est découpée en plusieurs morceaux.

Même là, tu peux les lire en te demandant laquelle des trois — Web, application ou base de données — chaque partie prend en charge.

Un seul chemin, à l'aller et au retour

La saisie de l'utilisateur descend de la couche serveur Web vers la couche serveur d'application, puis vers la couche base de données, et revient par le même chemin.

La couche serveur Web ne se connecte jamais directement à la couche base de données : la couche serveur d'application lit les enregistrements, décide du résultat et ne renvoie qu'une seule réponse.

Quelle partie de ton application est quelle couche — trois couches ne veut pas dire trois machines

Décide d'abord à quelle couche appartient chaque fichier et chaque framework d'un livre pour débutants, et les étapes prennent du sens.

Les mêmes trois couches, en JavaScript et en Python
==Couche serveur WebCouche serveurd'applicationCouche BDDindex.htmlscript.jsserver.js(Express)PostgreSQLindex.htmlscript.jsviews.py(Django)PostgreSQL
Chaque ligne est une couche. Les colonnes du milieu et de droite donnent les fichiers ou les produits de cette couche. Les lignes du haut et du bas sont identiques dans les deux cas, seule la ligne du milieu change.

La couche serveur Web, ce sont les mêmes fichiers dans les deux cas.

Ce que le navigateur peut lire directement, c'est HTML, CSS et JavaScript, donc tu ne choisis un langage qu'à partir de la couche serveur d'application.

Une couche est une façon de répartir des rôles, pas un nombre d'ordinateurs.

Les trois couches qui tournent sur un seul ordinateur, le tien
Ton ordinateur
Navigateur (couche Web)
  • Ouvrir http://localhost:3000 affiche le formulaire de réservation
  • Lit index.html et script.js et dessine l'écran
Serveur local (couche App)
  • Lancé avec node server.js
  • Attend sur le port 3000 et reçoit les requêtes
Base de données (couche BDD)
  • Enregistre les réservations et les données des membres dans reserve.db
  • Tourne sur le même ordinateur
Le cadre extérieur est ton ordinateur. Les trois couches tournent toutes sur cette seule machine, et la répartition en couches ne change pas après la mise en ligne.

Quand tu ouvres http://localhost:3000 sur ta machine, les trois couches sont toutes dans cet ordinateur.

Une fois en ligne, les couches sont souvent placées sur des serveurs séparés, et ce travail est traité dans l'article « Déploiement et variables d'environnement — de ce qui marche chez toi à la mise en ligne ».

Seul l'écran renvoyé par la couche serveur Web s'exécute sur l'appareil de l'utilisateur ; la couche serveur d'application et la couche base de données sont du côté du serveur public.

Même si tu déplaces la couche base de données sur une autre machine, la relation ne change pas : la couche serveur d'application lui envoie des ordres de lecture et d'écriture.

Le nombre de couches et le nombre d'ordinateurs sont deux choses différentes

Être découpé en trois couches ne veut pas dire que trois ordinateurs tournent.

Sur ta machine, les trois sont dans ton ordinateur ; une fois en ligne, les couches sont souvent placées sur des serveurs séparés.

QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Dans quelle couche places-tu le traitement qui vérifie si des réservations se chevauchent sur la même heure ?

Question 2Qu'est-ce qui circule entre la couche serveur Web et la couche serveur d'application ?

Question 3Tu ouvres http://localhost:3000 sur ta machine et tu fais aussi tourner la base de données sur ton ordinateur. Où sont les trois couches ?