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é