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

Introduction à Spring Boot et Microservices

Ce document décrit les principes de base de Spring Boot pour créer une application web avec des APIs RESTful. Il explique les concepts clés comme les microservices, Spring MVC, JPA et la sérialisation/désérialisation de données. Le document donne également des instructions étape par étape pour configurer un projet Spring Boot, créer des entités, des contrôleurs et des repositories pour gérer les données.

Transféré par

Farah Dridi
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)
34 vues32 pages

Introduction à Spring Boot et Microservices

Ce document décrit les principes de base de Spring Boot pour créer une application web avec des APIs RESTful. Il explique les concepts clés comme les microservices, Spring MVC, JPA et la sérialisation/désérialisation de données. Le document donne également des instructions étape par étape pour configurer un projet Spring Boot, créer des entités, des contrôleurs et des repositories pour gérer les données.

Transféré par

Farah Dridi
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

Spring Boot

SPRING BOOT

SPRING MVC

SPRING DATA JPA

SPRING SECURITY

TOKEN AVEC JWT

REQUEST &RESPONSE

REST API WEB SERVICEJSON+XML

SYSTEME CRUD

MANIPULATION DES EXCEPTIONS THROW

PAGINATION (PAGE & LIMIT)

VALIDATION DES DONNEES

RELATION ENTRE ENTITES

JPQL (JAVA PERSIST QUERY LANGUAGE)

CROS

SWAGGER

DEPLOIEMENT

Swager howa document ili t3mlou ba3ed mtkml l appp

CROS howa ki ybada andek 2 3 appl y communique entre eux dans different dommanie Backend-
front end

I. Théorie importante
1. Micro Services Vs Monolithique
1.1. Monolithic Architecture

Monolithic => toute l’application est dans un seul endroit (fi blassa wa7da Système wa7ed
) qui communique avec une base de donnés
Basé sur MVC
Model (Data Access Layer ) les service et les modeles
Vue (User Interface) pages html (angular, VueJs..Font-end)
Controller (Business Logic)

Problèmes :
1 : En cas d’une fonction ne fonctionne pas tout l’application ne fonctionne pas tu ne
peux pas connait ou est le problème exactement dans l UI ou BL ou bien DAL
2 : La maintenance très difficile (contrôle a des relations avec la compatibilité si il y a
un problème l’application ne fct pas
3 : la responsabilité en cas ou l’App est grand il y un grand problème de gérer l’App

1.2. Microservices Architecture

Au lieu de gérer toute l’application dans un seul endroit, l’en divise sous forme des
sous-modules indépendants
Expl : MS1 : présent la [Link] utilisateur. (Module -> MicroService)
MS2 : présent [Link] colis. (Module -> MicroService)
MS3 : présente [Link] (Module -> MicroService)

- En cas ou le MS1 ne fonctionne pas le reste des module fonctionne correctement


sauf le MS1 parce que chaque module est une application totalement différent que
l’autre (système d’informations)
- Chaque module peut communiquer avec une ou plusieurs BD
- L’UI (User Interface) peut communiquer avec plusieurs webservice (REST API )

 Donc il est évolutif, facile à maintenir, responsabilité séparer chaque module responsable lui-
même pour améliorer la performance applicatif.

2. Rest API Web Service

A chaque Microservice il y a un système de communication permet le MS de communiquer


avec un autre MS (communication entre eux les MS) soit avec un UI (User
Interface..Angular...React…VueJS…JavaScript…) grâce à les API REST
API = Application Programming Interface
REST = Representation State Transfer : Architecture de transformation des donnés (Envoyer/
Recevoir) entre les MS entre eux ou entre MS & UI via les protocoles HTTP/ HTTPS (via les
méthodes :
GET : Récupérer =Recevoir des donnes
POST : Envoyer des donnes (création)
PUT : Update les donnés
PATCH : Update
DELETE : Supprimer)

UI API REST Microservices


API REST joue le rôle d’Input/Output des donnes == Envoyer/Recevoir

3. Sérialisation & Dèserialisation


On se rappelle que rôle de API c’est l’envoi/ recevoir des donnes == Input /Output
Object  L’App nous fournit des object (MS)

Soit nous envoyer == Serialization des object sous format JSON ou XML
 Persister les donnes avec POST ou Modifier avec PUT
Si en doit Envoyer des donnes d’un MS à autre ou à UI donc :

- On a un Object Java : on ne peut pas envoyer des Object java directement parce
qu’il est possible que l’autre MS/UI n’utilise pas java peut être utilise php
nodejs… == différent langages.

Donc pour envoyer un Object Java  il faut convertir vers Array (normalize)
(Array type marche avec tous les language)  en suit il faut encoder l’Array vers
le format JSON ou XML

Soit nous Recevoir == Deserialization des object de format JSON ou XMl


 Recevoir/ Récupuration avec GET
Si nous avons Recevoir des donnés d’un autre MS/UI sou format JSON/UI
Il faut decoder sous format Array puis il faut denormalize vers des Object java

4. Représentation Service & Data

II. Spring boot - RestFul API - Web Service – JPA


1. Nouveau Projet Spring boot 1 :

Pour créer un projet


File  New  Spring Starter Project

 Name = edu/[Link]été.NomProject (edu : pour dire education & com pour les
site officielle) Name = Artifact
 Group = edu/com. NomDeSociété (moulet lmoul ili besh tets3ml site y3ni)
 Version = 0.1.1-SNAPSHOT
 Package = NomProject
Next 

 Finish.
- Spring Boot Installe les dépandance que vous avez ajouter(like spring web)
automatiquement
Cette classe et le point d’entrer de l’application
 @SpringBootApplication

Il y a aussi [Link] pour configurer notre application (port, connextion BD,


donnés des email…)
[Link] contient les propriétés projet et les dépendances installer.

 Spring Boot arrive pour permet de démarrer rapidement le développement des App et
des Microservice grace à
- Les dépendances (starteur = package de dépendances qui gérer des librairies des
dépendances)
- L’Auto Configuration
C’est comme j’ai dit au SB Gérer mon projet automatiquement selon les versions
compatible des dépendances)

2. Nouveau Projet Spring boot avec initializer :


3. REST Controller

REST Controller est un classe contient les API REST


(A chaque Microservice il y a un système de communication permet le MS de communiquer
avec un autre MS (communication entre eux les MS) soit avec un UI (User
Interface..Angular...React…VueJS…JavaScript…) grâce à les API REST )
Pour déclarer un contrôleur

File New Package : nom de package = [Link] ( ce package va


contient tous les contrôleurs de notre application users, colis, notification,….)
Sous ce package nous déclarons une classe java nomé NomMSController (epl :
UtilisateurController)

- Pour dire à SB que cette classe va jouer le rôle de Controller on ajout l’annotation
@RestController cette classe va contient tous les REST API (les méthode d’
Env/Rec des donnes via http), elle permet de créer des WebService REST en
utilisant le MVC
- Pour accéder à ce MS il faut ajouter l’annotation @RequestMapping()
Cette annotation prend comme paramètre l’URI principale pour accéder à les
API REST déclaré dans ce contrôleur.
Le Microservice pour communiquer (avec UI / Ms autre) a besoin
Requette http/URI + Verbe HTTP

4. Verbe http avec Spring MVC (CRUD)


GET POST PUT DELETE  sont les verbes HTTP à utiliser

NB : Nous avons utilisé le Framework Spring Web exactement Spring MVC dans cette classe
Spring MVC va inspecter les Requêtes HTTP (URI, chemin) entrent et rediriger vers le contrôleur
spécifier dans l’Uri et exécuter une méthode existe dans lui en fonction de Requête/URI & Verbe
HTTP
5. Lancer le serveur Tomcat

Or pour 1 ere fois :


6. Installer JPA et MySQL


Pour ajouter n’importe quelles dépendances il faut
- Ouvrir en navigateur maven repository (libraire des dépendances)
- Chercher le package à installer (JPA & MySQL)
- Choisir n’importe quelle version
- Copier le code de dépendances à votre fichier [Link]
- Redéployer
NB : la préférence de supprimer la balise version parce que maven est le responsable de gérer
les versions compatible avec votre projet automatiquement.
(les dépendances de persistance doit être de [Link] JPA)
7. Connection avec la BD
-jdbc:mysql://localhost:3306/NomBD
-La 1 fois nous utilise create pour créer les tables des entités en suite nous modifie
vers update
8. RequestBody la Dèserialisation

Serialize les donnés mt3 Djaja fi 3adhmaa


Wel 3adhma twali djeja

L app ki t5rej mnjha des donnés == Envoyer des donnés Serialize


Kn andek des object (json,xml,text..) we tab3thom l’app == Recevoir les données pour traiter Deserialize
@RequestBody utilisé pour passer un objet ou niveau de requête expl : dans le POST (l’ajout) en
donne les données à ajouter donc nous avons besoin de donner les informations nécessaires

@RequestBody = on va recevoir avec la notion de la desérialisation depuis l’extérieur des


informations (objet de type json, xml, text, ….)
Utilisateur = Classe entité
Utilisateur = objet contient les information

9. Création d’un entité

Pour créer une entité User (class== Modele)


File New Package : nom de package = [Link] ( ce package va contient
tous les entités, classe de notre application users, colis, notification,….)
Sous ce package nous déclarons une classe java nomé NomModele (epl : Utilisateur,
Professeur)

- Ajouter votre variables & les Getters & Setters


- Pour persister les entités java il faut ajouter ces annotation
@Entity

@Id
@GeneratedValue(strategy=[Link])

Selon Le Mapping Objet-Relationnel (ORM) avec JPA – Les entités


Le constructeur vide déjà existe mais caché

All of them in classe mére

10. Création d’un Repository

Pour créer un Repository


File New Package : nom de package = [Link] ( ce package va
contient tous les repositorys, interface de notre application userRepository, colisRepository,
notificationRepository,….)
Sous ce package nous déclarons une Interface java nomé NomModeleRepository (epl :
userRepository)
 Cette interface :
Anotoé avec @Repository
extends JpaRepository<NomEntity, TypeID> (CRUD + Pagination) /
CrudRepository<Utilisateur, Long> (CRUD seulement)
 Maintenant nous avons les opérations CRUD tout prête à utiliser avec ces 2 étapes.

11. Création d’un Service

Pour créer un Service


File New Package : nom de package = [Link] ( ce package va contient
tous les servises, interface & classes de notre application userService &
userServiceImplement )
Sous ce package nous déclarons une Interface java nomé NomModeleService (epl :
userService) et un Class java nomé NomModeleServiceImplements (epl : userService)
 NomModeleService : va contient tous les entête des méthodes à utiliser sans traitement
 NomModeleServiceImplements : va contient tous les méthodes à utiliser avec
traitements

 La Class NomModeleServiceImplements :
Anotoé avec @Service
 Implements de l’interface NomModeleService
 Déclarer un variable de type NomModeleRepository avec l’annotation @Autowired
Pour accéder aux CRUD (existe dans le repository)

12. CRUD (Create Read Update & Delete) System


13. Response XML ou JSON
Voir cours WebService de Mme Marwwa

- Donner le type des variables à consommer


- Donner le type des variables à produire
@Produces : type de résultat (GET)
@Consumes : type d’Entrer (POST, PUT)

14. Gestion des Exception Throwable


Cours WebService + Bright Coding

15. Pagination (Page & limite)


Pour la pagination

- Créer une classe qui doit contient les information néssésaire de pagination :
ListeUtilisateur, Nombre total des pages, Nombre de page Actuelle, Size de page (nbr des
element afficher dans une page).

- Dans le repository : créer une fnct de type de routeur Page<Utilisateur> et


consomme comme paramètre variable de type Pageable
- Implémenter cette fnct dans le service

-Dans le contrôleur :

- En peut utiliser @Param or/ @RequestParam (en peut utiliser le


(@RequestParam (value="size", defaultValue = "2") int size) pour
prend une valeur par défaut si vous ne pressier pas le size en cas ou vous donne
une valeur il a va prendre cette valeur, mais avec @Param on ne peut pas
mettre une valeur par default.

Nb : En Spring Boot la pagination commence toujours par 0 :


Page 1 pour nous = page 0 pour SB
P 2 Nous = page 1 SB …

16. Validation des données


17. RelationShips

a. OneToOne
b. ManyToMany
c. OneToMany---ManyToOne
d. OneToMany
@JsonBackReferences pour éviter d’entrer dans une boucle infini avec @OneToOne &
@ManyToOne Bidirectionnelle

18. Native Query & JPQL (Java Persist Query Language)

Ce sont des exemple de JPQL Query, en JPQL en communique avec les entity non les tables de BD
En Nativ Query voici un exemple :

19. Response XML ou JSONSpring Security & JWT - SignUp

 Installer JWT & Spring Security


 Crypter le password  How ?

a. Instancer
b. Crypter le pwd

c. New Package pour le security

d. Ml WebSecurityConfigurerAdapter copier cette fonction et modifier

Ajouter les modifications nécessaires

20. Spring Security & JWT - SignIn

a. 1 Créer
b. 2 dans les interfaces services relier un utilisateur machine par un user de spring boot

c. 3 Créer 2 instance + constructeur + copier la fonction et modifié

Vous aimerez peut-être aussi