0% ont trouvé ce document utile (0 vote)
0 vues8 pages

Angular SpringBoot Notes FR

Le document décrit le cycle complet d'une requête HTTP entre un utilisateur et une base de données en utilisant Angular et Spring Boot, en détaillant les composants et services impliqués. Il explique également l'injection de dépendance, la différence entre composants et services, ainsi que les types de liaison de données. Enfin, il souligne l'importance de la séparation des responsabilités entre contrôleurs et services dans une application Spring Boot.

Transféré par

macharrybooks
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues8 pages

Angular SpringBoot Notes FR

Le document décrit le cycle complet d'une requête HTTP entre un utilisateur et une base de données en utilisant Angular et Spring Boot, en détaillant les composants et services impliqués. Il explique également l'injection de dépendance, la différence entre composants et services, ainsi que les types de liaison de données. Enfin, il souligne l'importance de la séparation des responsabilités entre contrôleurs et services dans une application Spring Boot.

Transféré par

macharrybooks
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Du Clic Utilisateur à la Base de Données — et Retour

Notes visuelles — Angular & Spring Boot, en français

Angular Spring Boot Base de données Cycle complet

1. Diagramme — Du clic dans l'UI jusqu'à la base de données, et retour

Action utilisateur Composant Angular Service Angular


clic, formulaire → capte l'événement → logique d'appel API

Acteur : Utilisateur / Navigateur Acteur : Component Acteur : Service (@Injectable)


HttpClient Réseau Contrôleur
construit la requête → HTTPS / JSON → reçoit la requête

Acteur : HttpClient + Interceptor Acteur : TCP/IP, navigateur Acteur : @RestController


Service Spring Repository Base de Données
logique métier → accès aux données → exécute la requête SQL

Acteur : @Service Acteur : @Repository (Spring Data JPA) Acteur : MySQL / PostgreSQL

↑ le résultat remonte tout le chemin inverse ↑


Repository → Service Contrôleur Réseau
mappe les résultats → construit la réponse JSON → HTTPS / JSON

Acteur : Entity → DTO Acteur : ResponseEntity + Jackson Acteur : TCP/IP


Service Angular Composant Interface mise à jour
l'Observable reçoit la réponse → met à jour ses données → l'utilisateur voit le résultat

Acteur : HttpClient (subscribe) Acteur : Component Acteur : Template / DOM

Étapes en résumé :

1. L'utilisateur effectue une action dans l'interface (clic, soumission de formulaire).


2. Le composant Angular capte l'événement et appelle une méthode du service associé.
3. Le service utilise HttpClient pour construire la requête HTTP (méthode, URL, corps en JSON).
4. Un intercepteur ajoute d'éventuels en-têtes (ex. jeton d'authentification), puis la requête est envoyée via le réseau (HTTPS/TCP).
5. Le contrôleur Spring Boot (@RestController) reçoit la requête et la transmet à la couche Service.
6. Le Service applique la logique métier puis appelle le Repository pour interroger la base de données.
7. La base de données exécute la requête SQL et retourne les résultats (lignes de la table).
8. Ces résultats sont transformés en objets Java (Entity), puis en DTO si nécessaire.
9. Le contrôleur sérialise la réponse en JSON et la renvoie avec un code de statut HTTP.
10. Angular reçoit la réponse via l'Observable, met à jour les propriétés du composant.
11. Angular détecte le changement (change detection) et met automatiquement à jour l'interface utilisateur — sans rechargement de page.
2. Les composants d'Angular et de Spring Boot

Côté Angular

Module Composant Template


@NgModule → @Component → vue HTML
regroupe l'application UI + logique

↓ utilise également
Directive Pipe Service
*ngIf, *ngFor transforme l'affichage @Injectable
logique partagée

Un composant Angular est l'unité de base de l'interface : il combine une classe TypeScript (logique), un template HTML (vue) et une feuille de style CSS. Un module regroupe
plusieurs composants, directives et services liés entre eux.

Côté Spring Boot

Contrôleur Service Repository


@RestController → @Service → @Repository
reçoit les requêtes HTTP logique métier accès aux données

↓ manipule
Entity DTO Bean
@Entity objet exposé à l'API tout objet géré par Spring
classe liée à une table

Une application Spring Boot est composée de "composants" au sens large — chaque classe annotée (@Controller, @Service, @Repository) devient un Bean géré
automatiquement par le conteneur Spring, qui s'occupe de les créer et de les relier entre eux.
3. Qu'est-ce qu'une injection de dépendance ?

Une dépendance est simplement un objet dont une classe a besoin pour fonctionner (par exemple, un composant a besoin d'un service pour récupérer des données).
Normalement, une classe devrait créer elle-même ses dépendances avec le mot-clé new. Le problème : cela crée un couplage fort — une classe est directement liée à une
implémentation précise, ce qui rend le code difficile à tester et à faire évoluer.

L'injection de dépendance (DI) inverse ce contrôle : au lieu que la classe crée ses propres dépendances, c'est un conteneur externe (le framework) qui les crée et les "injecte"
automatiquement, typiquement via le constructeur.

Sans injection Couplage fort


la classe fait : new Service()
✗ difficile à tester / remplacer

↓ avec injection de dépendance ↓


Conteneur DI Objet injecté
Angular Injector / crée & fournit reçu automatiquement
Spring IoC Container par le constructeur

Avantages concrets de l'injection de dépendance :

Découplage : les classes ne connaissent pas les détails d'implémentation de leurs dépendances.
Testabilité : on peut facilement remplacer une dépendance réelle par une version simulée (mock) lors des tests.
Réutilisabilité : un même service/bean peut être partagé entre plusieurs classes sans dupliquer sa création.
Maintenance : changer une implémentation ne nécessite pas de modifier chaque classe qui l'utilise.
4. La différence entre un composant et un service

Composant

Représente une partie de l'interface visuelle


Contient un template (HTML) et un style (CSS)
Réagit aux actions de l'utilisateur
Décoré par @Component
Ne devrait pas contenir de logique métier lourde
Exemple : StudentListComponent

Service

Contient de la logique réutilisable (pas de vue)


Pas de template ni de style
Gère les appels API, le partage de données, les calculs
Décoré par @Injectable
Peut être injecté dans plusieurs composants
Exemple : StudentService

Composant Service
affiche les données
injecte et utilise → fournit les données

Règle simple : si ça concerne l'affichage → composant. Si ça concerne la donnée ou la logique partagée → service.

Cette même séparation existe côté Spring Boot, mais avec d'autres noms : le contrôleur joue un rôle proche du composant (il gère l'entrée/sortie, ici les requêtes HTTP), tandis
que le service Spring joue exactement le même rôle que le service Angular — centraliser la logique métier, indépendamment de la façon dont elle est appelée.
5. La liaison des données (Data Binding) — Angular et Spring Boot

Côté Angular — 4 types de liaison

Type Direction Syntaxe Usage

Interpolation Composant → Vue {{ titre }} Afficher une valeur

Property Binding Composant → Vue [src]="image" Définir une propriété HTML

Event Binding Vue → Composant (click)="save()" Réagir à une action utilisateur

Two-way Binding Composant ⇄ Vue [(ngModel)]="nom" Synchroniser un formulaire

La liaison de données Angular relie automatiquement le code TypeScript et le HTML, sans manipulation manuelle du DOM.

Côté Spring Boot — "liaison" des données à l'API

@RequestBody @ResponseBody
JSON entrant → objet Java ↔ (implicite dans @RestController)
objet Java → JSON sortant

Spring Boot n'a pas de "data binding" visuel comme Angular, puisqu'il n'a pas d'interface graphique — mais il fait l'équivalent au niveau des données : il relie automatiquement le
JSON reçu à un objet Java (via @RequestBody), et relie l'objet Java retourné au JSON envoyé (sérialisation automatique par Jackson). On parle aussi de liaison entre une Entity et
une table de base de données via les annotations @Entity, @Column, @Id, qui relient chaque champ Java à une colonne SQL.
6. Le cycle d'une requête HTTP

Chaque requête HTTP suit toujours le même cycle en quatre grandes phases :

1. Requête 2. Traitement
le client envoie → le serveur reçoit,
méthode + URL + en-têtes + corps route, exécute la logique


3. Réponse 4. Réception
le serveur renvoie → le client interprète
code de statut + corps la réponse et agit

Détail du cycle

1. Ouverture de connexion : le navigateur établit une connexion TCP (souvent réutilisée) avec le serveur.
2. Envoi de la requête : contient une méthode (GET, POST, PUT, DELETE), une URL, des en-têtes (ex. jeton d'authentification), et parfois un corps en JSON.
3. Réception côté serveur : Spring Boot (via Tomcat) reçoit la requête, passe par une chaîne de filtres (sécurité, CORS).
4. Routage : la requête est dirigée vers la bonne méthode du contrôleur selon l'URL et la méthode HTTP.
5. Traitement métier : le contrôleur délègue au service, qui peut interroger la base de données via le repository.
6. Construction de la réponse : un code de statut HTTP est choisi (200, 201, 400, 404, 500...) et les données sont sérialisées en JSON.
7. Retour au client : la réponse traverse à nouveau le réseau jusqu'au navigateur.
8. Traitement côté client : Angular reçoit la réponse via l'Observable, met à jour les données et rafraîchit l'interface.

Codes de statut les plus courants

200 / 201
Succès / Créé

400 / 401 / 404


Erreur du client

500
Erreur serveur
7. Injection de dépendance — Angular vs Spring Boot

Angular

Conteneur : Injector (hiérarchique)


Déclaration : @Injectable()
Injection via le constructeur du composant/service
Portée possible : racine (root), module, ou composant
Exemple :
constructor(private svc: StudentService) {}

Spring Boot

Conteneur : IoC Container (ApplicationContext)


Déclaration : @Component, @Service, @Repository
Injection via @Autowired ou constructeur
Portée par défaut : singleton (une seule instance)
Exemple :
@Autowired private StudentRepository repo;

Le principe est identique des deux côtés

Conteneur DI Les injecte automatiquement La classe les utilise


crée les objets nécessaires
→ dans le constructeur
→ sans jamais faire "new"

Angular et Spring Boot partagent la même philosophie de conception (Inversion of Control) — ce n'est pas une coïncidence : Angular s'est inspiré des frameworks backend comme Spring pour son propre système
d'injection.
8. Les contrôleurs et services côté Spring Boot

Le Contrôleur (@RestController)

Le contrôleur est le point d'entrée de l'API : il reçoit les requêtes HTTP et renvoie les réponses. Il ne doit contenir aucune logique métier — son rôle est uniquement de router la
requête vers le bon service et de formater la réponse.

@GetMapping("/students") appelle [Link]() retourne ResponseEntity<List>


reçoit GET
→ →

Le Service (@Service)

Le service contient la logique métier réelle : validations, calculs, règles de gestion, coordination entre plusieurs repositories. C'est la couche qui devrait être testée le plus
rigoureusement, car c'est là que se trouve la valeur métier de l'application.

Reçoit l'appel Applique les règles Appelle le Repository


du contrôleur
→ ex : vérifier l'unicité d'un email
→ pour lire/écrire en base

Pourquoi séparer les deux ?

Aspect Contrôleur Service

Rôle Gérer les requêtes/réponses HTTP Contenir la logique métier

Connaît HTTP ? Oui (codes de statut, headers) Non — indépendant du web

Réutilisable ? Non, lié à une route précise Oui, appelable depuis plusieurs contrôleurs

Testé comment ? Tests d'intégration (API) Tests unitaires (logique pure)

Cette séparation stricte permet de changer la façon dont l'API est exposée (REST, GraphQL...) sans jamais toucher à la logique métier elle-même.

Vous aimerez peut-être aussi