Guide de création d'applications Cloud Native
Guide de création d'applications Cloud Native
1
Partie 1: Introduction de cloud native
Définir le cloud
Définir l’approche cloud native
2
Chapitre 1: Définir le cloud
1. Concept du cloud et ses avantages
• Le terme « cloud » désigne les serveurs accessibles sur Internet, ainsi que les logiciels et bases de données
qui fonctionnent sur ces serveurs.
• Les serveurs situés dans le cloud sont hébergés au sein de datacenters répartis dans le monde entier.
• Grâce au cloud computing(informatique cloud) , utilisateurs et entreprises n'ont plus besoin de gérer eux-
mêmes des serveurs physiques ou d'installer des applications sur leurs propres équipements.
3
• Le cloud permet aux utilisateurs d'accéder aux mêmes fichiers et aux mêmes applications à partir de
presque n'importe quel appareil, car les processus informatiques et le stockage ont lieu sur des serveurs
dans un datacenter et non localement sur la machine utilisateur.
• C'est pourquoi vous pouvez vous connecter votre compte Instagram à partir de n’importe quel appareil,
avec toutes vos photos, vidéos et l'historique de vos conversations. Il en va de même avec les
fournisseurs de messagerie cloud comme Gmail ou Microsoft Office 365 et les fournisseurs de stockage
cloud comme Dropbox ou Google Drive.
• Pour les entreprises, le passage au cloud computing supprime certains coûts et frais informatiques : par
exemple, les sociétés n'ont plus besoin de mettre à jour et d'entretenir leurs propres serveurs, c'est le
fournisseur de cloud qui s'en charge.
4
Serveur informatique vs cloud : quelle solution de stockage de données choisir pour une entreprise ?
Le choix du stockage des données est crucial pour les entreprises face à l'augmentation continue des volumes
d'informations. Une gestion efficace des documents et des données est essentielle pour rester compétitif.
Un serveur est un ordinateur puissant installé dans vos locaux, conçu pour gérer et stocker les données de
votre entreprise. Il connecte les postes des employés (ordinateurs clients) et leur fournit différents services :
– L’accès à Internet,
– Le partage de fichiers,
– Le partage d’imprimantes,
– Le stockage en base de données ,
– La mise à disposition d’applications, etc.
5
Les limites du serveur informatique:
Coûts élevés
• Achat initial du serveur et des équipements réseau.
• Coûts de maintenance régulière et mise à jour des systèmes.
• Besoin d’une équipe spécialisée pour gérer le serveur.
6
Le cloud computing doit posséder 4 caractéristiques essentielles :
• Le service doit être en libre-service à la demande : Cela signifie que les utilisateurs ont la possibilité
d'accéder au service quand ils en ont besoin, sans nécessiter l'intervention humaine d'un fournisseur de
service.
Exemple: Un étudiant utilise Google Drive pour enregistrer ses fichiers. Il peut créer un dossier ou
ajouter un nouveau document à tout moment, simplement en se connectant à son compte, sans avoir
besoin de demander de l’aide à un technicien ou à Google.
Exemple : Sur Google Cloud, une entreprise peut suivre combien d’espace de stockage ou de temps
de calcul elle a utilisé pour son projet. Elle reçoit une facture détaillée chaque mois basée sur ces
paramètres mesurés.
• Il doit y avoir une mutualisation des ressources : Cela signifie que les ressources (comme les
serveurs, les réseaux, ou les bases de données) sont partagées entre plusieurs utilisateurs ou applications,
permettant une utilisation efficace et économique.
• Il doit être rapidement élastique (adaptation rapide à une variation du besoin) :Le service peut
augmenter ou réduire ses ressources rapidement pour répondre à la demande ou des besoins des
utilisateurs.
7
• Les avantages du Cloud
8
2. Exemple des fournisseurs cloud
Les 10 premiers fournisseurs mondiaux de cloud en termes de revenus totaux pour le trimestre fiscal se
terminant le 31 mars 2021 (en milliards de dollars américains).
9
3. Différence entre cloud privé, public et hybride
Cloud public
• Les clouds publics sont généralement des environnements cloud créés à partir d'une infrastructure
informatique qui n'appartient pas à l'utilisateur final.
• Alibaba Cloud, Microsoft Azure, Google Cloud, Amazon Web Services (AWS) et IBM Cloud sont les
principaux fournisseurs de cloud public.
• Les clouds publics étaient habituellement exécutés hors site, où les ressources comme les serveurs et
le stockage sont gérés par des fournisseurs externes(c‘est comme louer de l'espace sur Internet pour
faire fonctionner vos logiciels et stocker vos fichiers, sans avoir à gérer vous-même les infrastructures
physiques.)
10
Cloud privé
• Les clouds privés sont généralement définis comme des environnements cloud spécifiques à un
utilisateur final ou à un groupe, et sont habituellement exécutés derrière le pare-feu de l'utilisateur ou
du groupe, ce qui signifie que l'accès aux ressources du cloud privé est limité et sécurisé.
• Tous les clouds deviennent des clouds privés lorsque l'infrastructure informatique sous-jacente est
spécifique à un client unique, avec un accès entièrement isolé.
11
Caractéristiques clés du Cloud Privé :
• Les ressources (serveurs, stockage) ne sont pas partagées avec d'autres utilisateurs.
• L'infrastructure est généralement protégée par un pare-feu pour empêcher tout accès non autorisé.
Et les utilisateurs autorisés (par exemple, les employés d'une entreprise) peuvent accéder à ces
ressources via des connexions sécurisées.
Exemple
Une entreprise ayant des données sensibles (par exemple, des informations financières) peut choisir
d'utiliser un cloud privé pour héberger ces données.
L'entreprise peut utiliser des serveurs spécifiquement pour elle. Ces serveurs sont protégés par des
systèmes de sécurité avancés, et seul le personnel autorisé peut y accéder via des connexions
sécurisées..
12
Cloud hybride
Le cloud hybride est une combinaison de cloud public et de cloud privé, où une organisation utilise à la fois
des ressources dans le cloud public et dans le cloud privé, tout en permettant la communication et le partage
de données entre les deux environnements.
En d'autres termes, une entreprise peut garder certaines données ou applications dans un cloud privé pour des
raisons de sécurité et de contrôle, tout en utilisant un cloud public pour d'autres besoins moins sensibles,
comme le stockage de fichiers non confidentiels ou l'hébergement d'applications.
13
4. Services du cloud (IAAS, PAAS, SAAS)
As-a-Service : définition
Le concept "As-a-Service" désigne les services cloud fournis à la demande, souvent facturés selon une
utilisation réelle. Ce modèle permet de déléguer la gestion de l’infrastructure, afin que les entreprises
puissent se concentrer sur leurs activités principales, telles que :
- IaaS (Infrastructure-as-a-Service)
- PaaS (Platform-as-a-Service)
- SaaS (Software-as-a-Service).
14
IaaS : Infrastructure as a Service
Exemple
Hébergement d’applications : Une entreprise de développement de
logiciels utilise Amazon Web Services (AWS) pour héberger ses
applications, plutôt que d'acheter des serveurs physiques.
Stockage et sauvegarde : Une entreprise sauvegarde ses données
critiques sur Microsoft Azure pour éviter les risques liés aux pannes
matérielles.
15
• Test et développement :Les développeurs utilisent des machines virtuelles sur Google Cloud Platform
pour tester de nouvelles applications sans investir dans des équipements coûteux.
L'IaaS est le modèle Cloud « as a Service » le plus flexible et libre, il apporte aux utilisateurs tous les
avantages des ressources informatiques sur site, sans les actions et frais de gestion de l’infrastructure
En effet, il facilite la mise à l'échelle, la mise à niveau et permet d'ajouter des ressources, par exemple le
stockage dans le Cloud
16
PaaS : Platform as a Service
Exemple :
• Développer une application en utilisant Google App Engine ou
Heroku, où le développeur se concentre uniquement sur le code.
17
• Idéalement destiné aux développeurs et aux programmeurs, le PaaS fournit une plateforme simple et
évolutive permettant aux utilisateurs d’exécuter et gérer leurs propres applications, sans avoir à créer ni
entretenir l'infrastructure ou la plateforme généralement associée au processus
Environnement de développement simplifié.
Gestion automatique de l'infrastructure.
Réduction des tâches d'administration.
18
SaaS : Software as a Service
Exemple :
• Google Workspace: Fournit des applications comme Gmail, Google
Drive, Google Docs, et Google Meet, accessibles via un navigateur.
• Microsoft 365 : Offre des outils comme Word, Excel, et Teams,
accessibles depuis le cloud
19
SaaS : Software as a Service
Le SaaS constitue une option intéressante pour les PME qui n'ont pas les ressources humaines pour gérer
l'installation et le suivi de l’installation des mises à jour de sécurité et logiciels.
Par ailleurs, il est à noter que le modèle SaaS réduit le niveau de contrôle et peut nuire à la sécurité et
aux performances
=> Il convient donc de choisir soigneusement votre fournisseur Cloud
20
Chapitre 2: Définir l’approche cloud native
1. Définition
21
Fonctionnement
L’approche Cloud Native repose sur quatre piliers qui sont liés.
• Les conteneurs : (comme Docker) permettent d’emballer une application avec toutes ses dépendances
dans un format portable. Ils garantissent que l'application fonctionne de manière cohérente dans tous
les environnements (développement, test, production).
• DevOps: La culture DevOps intègre les équipes de développement et d’exploitation pour accélérer les
livraisons et améliorer la qualité des logiciels.
• Continuous Delivery (CD) : Les processus de Continuous Delivery permettent l’automatisation des
étapes de build, test, et déploiement. Cela garantit une livraison fréquente et rapide des nouvelles
fonctionnalités sans interruption de service.
22
2. Avantages
23
• Netflix, Uber et WeChat exposent des systèmes natifs Cloud qui se composent de nombreux services
indépendants. Ce style architectural leur permet de répondre rapidement aux conditions du marché.
Elles mettent instantanément à jour de petites zones d’une application complexe en service, sans
redéploiement complet. Elles mettent à l’échelle individuellement les services en fonction des besoins.
24
3. Vue générale sur les caractéristiques du cloud natif
L'approche Cloud Native repose sur une combinaison de microservices, conteneurs et livraison continue .
Cela permet de créer des applications flexibles, scalables et résilientes tout en facilitant leur déploiement et
gestion à travers la culture DevOps. Ces pratiques assurent une réactivité et une efficacité accrues dans un
environnement cloud dynamique
25
Automatisation des processus du développement et de déploiement:
• Comme l’approche DevOps, le Cloud Native cherche à rassembler les équipes Dev et Ops autour d’un
objectif commun long terme : celui de la création de valeur business par les applications.
• L’approche DevOps permet de converger vers une approche Cloud Native avec l’automatisation des
processus et des technologies entre les équipes, de façon à intégrer plus rapidement les innovations
dans les cycles de développement et de déploiement d’une application Cloud Native.
• En parallèle du Cloud Native, l’adoption des méthodes Agiles va permettre d’intégrer les équipes
métier dans cette collaboration avec les équipes techniques et de développement. L’idée est de
collaborer pour délivrer une itération en améliorant le produit à chaque livraison de façon continue.
26
Les microservices
• Les microservices désignent à la fois une architecture et une approche de développement logiciel qui
consiste à décomposer les applications en éléments les plus simples, indépendants les uns des autres.
Contrairement à une approche monolithique classique, selon laquelle tous les composants forment une
entité indissociable, les microservices fonctionnent en synergie pour accomplir les mêmes tâches, tout
en étant séparés.
• Pour communiquer entre eux, les microservices d'une application utilisent le modèle de
communication requête-réponse. L'implémentation typique utilise des appels API REST basés sur le
protocole HTTP. Les procédures internes (appels de fonctions) facilitent la communication entre les
composants de l'application.
27
Les Conteneurs
28
Partie 2: Création des APIs REST simple en
node js et express js
29
Chapitre 1:Introduire Express et Node js
Une API (Interface de Programmation d'Application) est un outil qui permet à deux systèmes
informatiques différents de communiquer automatiquement, sans intervention humaine.
Elle agit comme un pont, facilitant l'échange d'informations entre un fournisseur (qui donne les
données) et un utilisateur (qui les utilise). On peut la voir comme un contrat précisant ce que
l'utilisateur demande (appel) et ce que le fournisseur répond (réponse).
30
Avantages des APIs
Simplicité d'interaction : Les APIs permettent d'interagir avec un système sans avoir à
comprendre sa complexité ou son fonctionnement interne. Par exemple, tu peux afficher une
carte Google Maps sur ton site web sans savoir comment Google construit ses cartes.
Spécialisation et simplicité d'utilisation : Chaque API est souvent conçue pour un cas d'usage
précis, ce qui la rend facile à comprendre, à utiliser et à sécuriser. Par exemple, une API météo
te permet d'afficher uniquement la température et les prévisions pour une ville donnée.
Partage de données : Les APIs facilitent le partage sécurisé de vos données avec vos clients et
d'autres utilisateurs externes. Par exemple, une banque utilise une API pour permettre à ses
clients de consulter leur solde via une application mobile ou un site tiers, tout en garantissant la
sécurité des données partagées.
31
l'API REST ?
• Roy Fielding a créé REST (Representational State Transfer), un style architectural très utilisé pour
développer des services web.
• API REST permet à différents systèmes informatiques de communiquer entre eux via le protocole
HTTP de manière simple et efficace.
• API REST expose un ensemble d'URLs (endpoints) représentant différentes ressources, ainsi que
des méthodes HTTP standard comme GET, POST, PUT, DELETE pour effectuer des opérations sur
ces ressources. Par exemple, en utilisant une API REST, vous pouvez envoyer une requête HTTP
GET à une URL spécifique pour récupérer des données, ou une requête POST pour créer de
nouvelles données sur le serveur.
• Exemple: Une requête GET sur https://api.exemple.com/utilisateurs pourrait renvoyer la liste des
utilisateurs au format JSON.
32
Comment fonctionne une API REST?
• REST détermine comment organiser et structurer les URLs (endpoints) pour représenter des
ressources.
• Chaque URL est connue sous le nom de demande (request), tandis que les données renvoyées sont
appelées réponse (response).
• Une API REST exploite les méthodes HTTP pour effectuer différentes actions sur les ressources
33
2. Rappel des méthodes du protocole http
HTTP (Hypertext Transfer Protocol) est créé pour fournir la communication entre les clients et le
serveur. Il fonctionne en tant qu’une requête et une réponse. Il existe deux méthodes HTTP
principalement utilisées: GET et POST
La méthode GET
La méthode GET de HTTP demande des données d’une source spécifiée. Les demandes GET peuvent
être mises en cache et rester dans l'historique du navigateur. Il ne doit jamais être utilisé lorsque vous
travaillez sur des données sensibles.
La méthode POST
La méthode POST envoie les données à traiter à une source spécifiée. Contrairement à la méthode
GET, les requêtes POST ne sont jamais paramétrées, elles ne restent pas dans l'historique du navigateur
et il est plus sécurisé pour des données sensibles.
34
Comparaison des méthodes GET et POST
GET POST
But principal Récupérer des données. Envoyer des données pour traitement.
Les paramètres sont visibles dans Les paramètres sont dans le corps de la
Visibilité dans l'URL
l'URL. requête.
Reste dans l’historique de Ne reste pas dans l’historique de
Historique
navigateur. navigateur.
Cacheable Oui, peut être mis en cache. Non, n'est pas mis en cache.
35
Outre les méthodes GET et POST, il existe d'autres méthodes.
Méthodes Descriptions
PUT Remplacer ou modifier une ressource existante
36
3. Définition de l’écosystème Node JS
Au cours de ses 20 premières années, JavaScript a été utilisé principalement pour les scripts côté client.
Étant donné que JavaScript ne pouvait être utilisé qu’à l’intérieur de la balise <script>, les développeurs
devaient travailler dans plusieurs langages et frameworks entre les composants frontend et backend. Plus
tard est apparu Node.js, qui est un environnement d’exécution comprenant tout ce qui est nécessaire pour
exécuter un programme écrit en JavaScript.
Node.js est un environnement pour développer et déployer des applications web à base du Javascript.
Il fonctionne avec le moteur d’exécution JavaScript V8 et utilise une architecture d’E / S non bloquante et
pilotée par les événements, ce qui le rend efficace et adapté aux applications en temps réel.
37
• Environnement d'exécution single-thread :
Lorsque l'on dit que Node.js est single-thread, cela signifie qu'il utilise un seul thread (fil d'exécution)
pour traiter les requêtes et exécuter le code. Contrairement à certains environnements d'exécution,
comme les serveurs traditionnels qui utilisent un modèle multi-thread pour gérer les connexions,
Node.js utilise un seul thread pour gérer toutes les opérations.
• Open-source et multi-plateforme :
Node.js est open-source, ce qui signifie que son code source est disponible publiquement et que toute
personne peut contribuer à son développement et l'améliorer.
Il est également multi-plateforme, ce qui signifie qu'il peut fonctionner sur différentes plates-formes
matérielles et logicielles, telles que Windows, macOS et Linux.
Node.js est utilisé pour développer des applications côté serveur, ce qui signifie qu'il gère les requêtes
provenant des clients (comme les navigateurs web) et fournit des réponses appropriées..
38
• Moteur d'exécution JavaScript V8 :
V8 est le moteur d'exécution JavaScript développé par Google et utilisé par Node.js pour exécuter du code
JavaScript. Il convertit le code JavaScript en code machine exécutable par l'ordinateur.
L'E/S (Entrée/Sortie) se réfère aux opérations de lecture et d'écriture de données depuis ou vers un
périphérique, tel qu'un disque dur ou un réseau. Dans Node.js, ces opérations sont gérées de manière non
bloquante, ce qui signifie que le thread principal peut continuer à exécuter d'autres tâches pendant que les
opérations d'E/S sont en cours.
De plus, Node.js utilise une architecture pilotée par les événements, où les opérations sont déclenchées par
des événements, tels que les requêtes HTTP entrantes. Cette approche permet à Node.js de réagir
rapidement aux événements et de traiter de multiples requêtes simultanément sans bloquer le thread
principal.
39
• Node.js utilise l’architecture « Single Threaded Event Loop » pour gérer plusieurs clients
en même temps.( c-a-d dans ce modèle, il y a un seul thread (le thread principal) qui gère
toutes les requêtes entrantes et les événements, et le serveur utilise une boucle
d'événements (Event Loop) pour traiter les requêtes de manière asynchrone et non
bloquante.
40
Caractéristiques de Node.js
Node.js a connu une croissance rapide au cours des dernières années. Cela est dû à la vaste liste de
fonctionnalités qu’il offre :
41
Quelques entreprises des plus populaires qui utilisent Node.js aujourd’hui :
Twitter, Spotify , eBay, LinkedIn
Applications de Node.js
Node.js est utilisé pour une grande variété d’applications. Explorons quelques cas d’utilisation
populaires où Node.js est un bon choix :
Applications de Streaming
Exemples : Services de streaming vidéo ou audio (comme Netflix ou Spotify).
42
Qu’est-ce qu’Express.js ?
Express.js, parfois aussi appelé « Express », est un framework backend Node.js minimaliste et rapide
qui offre des fonctionnalités et des outils robustes pour développer des applications backend
évolutives. Il vous offre le système de routage et des fonctionnalités simplifiées pour étendre le
framework en développant des composants et des parties plus puissants en fonction des cas
d’utilisation de votre application.
43
4. Configuration de l’environnement de développement
Installation de Node.js
Tout d’abord, nous devons télécharger le fichier Windows Installer (.msi) depuis le site officiel de Node.js.
Ce fichier d’installation MSI contient une collection de fichiers d’installation essentiels pour installer,
mettre à jour ou modifier la version existante de Node.js.
Le programme d’installation contient également le gestionnaire de paquets Node.js (npm). Cela signifie
que vous n’avez pas besoin d’installer npm séparément.
44
Installation de Node.js
Commencer le processus d’installation: Une fois que vous avez ouvert et exécuté le fichier.msi, le
processus d’installation commence.
Node.js vous offre des options pour installer des outils pour les modules natifs. Si vous êtes intéressé par
ces derniers, cliquez sur la case à cocher pour marquer vos préférences, ou cliquez sur Suivant pour
continuer avec la valeur par défaut :
45
Installation de Node.js
46
Installation de Node.js
Pour vérifier l’installation et confirmer que la bonne version a été installée, ouvrez l’invite de commande
votre PC et saisissez la commande suivante :
node –v
npm –v
47
Généralement vous aurez besoin des commandes suivantes :
48
Etape 1 : Création du fichier package.json
A la fin de cette étape, nous aurons Un fichier package.json contant les paramètres du projet ainsi
que les dépendances future.
49
Etape 2 : Installation du serveur Express
Pour installer le framework Express dans le projet, il faut exécuter la commande suivante :
50
Pourquoi est ce qu’on a besoin d’ajouter la dépendance dans package.json?
Le fichier package.json répertorie toutes les dépendances (bibliothèques) utilisées dans le projet, ainsi que
leurs versions spécifiques. Cela permet à d'autres développeurs de savoir quelles dépendances sont
nécessaires pour faire fonctionner l'application. Aussi, en spécifiant les dépendances dans package.json,
vous assurez la répétabilité de l'environnement de développement. Cela signifie qu'un autre développeur
(ou vous-même sur un autre système) peut installer exactement les mêmes versions des dépendances, ce
qui garantit un comportement cohérent de l'application.
51
Etape 3 : Lancement du serveur Express
En Node.js, un module est simplement un fichier JavaScript contenant des fonctions, des objets ou des
variables que vous souhaitez partager entre plusieurs fichiers. Les modules vous permettent de
modulariser votre code, de le rendre plus facile à comprendre et de le réutiliser facilement.
Les fichiers de module sont fondamentaux pour organiser et structurer une application Node.js en
modules réutilisables et autonomes.
53
Etape 3: Importer le module : Pour utiliser le module dans un autre fichier JavaScript, vous devez
l'importer en utilisant la syntaxe require. Par exemple, pour utiliser le module "sum.js" que nous avons
créé ci-dessus, vous pouvez l'importer dans un autre fichier JavaScript en écrivant :
Dans cet exemple, nous avons importé le module "sum.js" à l'aide de l'instruction require en passant le
chemin relatif vers le fichier "sum.js". Nous avons ensuite utilisé la fonction sum exportée par le module
pour calculer la somme de deux nombres.
En résumé, pour créer un module en Node.js, vous devez définir les fonctions, les objets ou les variables
que vous souhaitez exporter dans un fichier JavaScript, utiliser la syntaxe module.exports pour exporter
le code, puis importer le module dans d'autres fichiers JavaScript à l'aide de l'instruction require.
54
Depuis l'arrivée de la norme ES6 du langage, une nouvelle directive est apparue : il s'agit de la directive
"import". Cette directive apporte de nouveaux avantages mais nécessite que le module que vous importiez
la prenne en charge.
55
Dans NodeJS, il peut y avoir une confusion entre les deux directives. Par exemple, pour la plateforme
Express JS, on trouve sur internet des morceaux de code avec les deux directives.
Pourtant, la plateforme Express ne gère pas la directive "import". Si vous essayez cette directive sans
avoir installé d'autres modules, vous obtiendrez le message d'erreur "express has no default export". La
raison pour laquelle la directive "import" va fonctionner dans certains codes est la présence d'une autre
librairie, Babel.
Utilisation de Babel :
Babel est un transcompilateur JavaScript qui permet de convertir du code écrit dans des versions plus
récentes de JavaScript (comme ES6/ES2015 et au-delà) en code JavaScript compatible avec des
environnements plus anciens ou des environnements qui ne prennent pas encore en charge ces
fonctionnalités.
L'une des fonctionnalités de Babel est la capacité à transformer automatiquement les instructions
"import" en instructions "require" lorsque vous utilisez ES6 dans votre code et que vous exécutez votre
application Node.js.
56
Les bibliothèques standard Node.js : Voici la liste des bibliothèques contenues dans Node.js
considérées comme stables:
57
Suite des bibliothèques standards Node.js
58
Chapitre 2: Créer des APIs REST
Etant donné que nous n’avons aucune route configuré, sur le navigateur, si on tape 127.0.0.1:80: on aura
le message d’erreur suivant:
Une fois que le serveur est lancé, on pourra développer nos API Rest, deux étapes sont nécessaires :
59
Etape 1 : Présentation de notre source de données
Nous allons considérer un fichier equipes.json contenant un ensemble d’équipes de foot. L’objectifs
de cette section est d’exposer les opérations CRUD(Create, Remove, Update,Display) sur cette
source de données
Ainsi les routes que nous allons considérer sont les suivantes:
GET /equipes(display)
GET /equipes/:id (display)
POST /equipes(create)
PUT /equipes/:id (update)
DELETE /equipes/:id (remove)
60
2. Test de l’API REST avec Postman
61
Postman, c'est quoi ?
Postman est officiellement présentée comme une plateforme API pour la création et l’utilisation d’API.
D’une manière générale, Postman est une plateforme qui permet de simplifier chaque étape du cycle de
vie des API et de rationaliser la collaboration, afin de créer, plus facilement et plus rapidement, de
meilleures API.
la possibilité d’utiliser la plateforme, quel que soit le langage utilisé pour la programmation des API
une interface utilisateur assez simple et facile à prendre en main
l’absence de compétences nécessaires en codage.
62
Comment marche Postman ?
Le fonctionnement de Postman se résume le plus souvent à formuler une requête en suivant la structure
spécifique (Verbe http + URI + Version http + Headers + Body) puis à obtenir une réponse.
Le code de réponse HTTP délivré par la plateforme informe ensuite le développeur du statut de la
réponse : "200 OK" pour une requête réussie, "404 Not Found" pour un échec, etc.
Postman est compatible avec les différents systèmes d’exploitation (Linux, Windows et OS X). Pour
télécharger Postman, il suffit de se rendre sur le site internet officiel de la plateforme.
https://www.postman.com/downloads/
63
Etape 1 : Présentation de notre source de données
Etant donné que nous n’avons aucune route configuré, sur le navigateur, si on tape 127.0.0.1:80: on aura
le message d’erreur suivant:
Une fois que le serveur est lancé, on pourra développer nos API Rest, deux étapes sont nécessaires :
64
Etape 2 : Route GET /equipes : Ajoutons le bout de code suivant:
Le framework Express Nous propose des méthode get, post, put delete pour manipuler les
données
faites ctrl + c : pour Annuler le serveur puis relancer node index.js
65
Etape 2 : Route GET / equips
66
Etape 2 : Route GET / equipes
67
Etape 2 : Route GET / equipes/:id
La requête suivante est aussi une requête GET avec un paramètre «id»
68
Rappel des Middlewares :
Les middlewares sont des fonctions qui s'exécutent lors de la requête au serveur. Ces fonctions ont accès aux
paramètres de la requête et de la réponse et peuvent donc effectuer beaucoup de choses pour
améliorer/automatiser les fonctionnalités de l'API
Le middleware se situe entre la requête et la réponse : user request -> midlleware -> response
Exemple
Lors d'une requête POST, les données envoyées par le client (comme des données de formulaire ou en
JSON) sont incluses dans le corps (body) de la requête HTTP. Cependant, Node.js ne permet pas d'y accéder
directement. Pour cela, on utilise un middleware.
Ce middleware agit comme un intermédiaire entre l'arrivée de la requête sur le serveur et son traitement par
les routes. Il lit le corps de la requête, extrait les données, et les rend accessibles pour le reste de
l'application. Ainsi, nos routes peuvent facilement utiliser les données envoyées dans la requête POST.
69
La méthode app.use(express.json()) est une méthode d'Express.js qui permet de définir un middleware pour
l'analyse des corps de requête entrants au format JSON.
70
Route PUT / equipes /:id
Pour la requête PUT on doit spécifier comme paramètre l’id de l’objet à modifier
71
Route PUT / equipes /:id
72
Route DELETE / equipes /:id
73
Exercice
74
Rappel Mongodb :
Comme nous l’avons vu dans le module gestion de données , MongoDB est une base de
données NoSQL orientée document. Elle se distingue des bases de données relationnelles par
sa flexibilité et ses performances.
Les documents sont des paires de valeurs / clés servant d’unité de données de base. Les
collections quant à elles contiennent des ensembles de documents et de fonctions. Elles sont
l’équivalent des tableaux dans les bases de données relationnelles classiques
75
Créer une base de donnée et une Collection
Nom de la base : bdmonapi
Nom de la collection (équivalent à table) : equipe
76
Importation du fichier equipe.json: Au niveau collection, on peut importer la ressource et
charger notre data
77
Installation du package mongo dans notre projet
78
Connexion à la base de données noSql MongoDB
79
Récupération de la liste des équipes depuis la collection equipe
80
Récupération d’une équipe depuis la collection equipe
81
4. Opérations CRUD
82
Supprimer une équipe depuis la collection equipe
83
Modifier une équipes depuis la collection equipe
84
CHAPITRE 3 Authentifier une API REST avec JWT
Les « JSON Web Token » ou JWT sont des jetons générés par un serveur lors de l’authentification d’un
utilisateur sur une application Web, et qui sont ensuite transmis au client.
Ils seront renvoyés avec chaque requête HTTP au serveur, ce qui lui permettra d’identifier l’utilisateur.
Pour ce faire, les informations contenues dans le jeton sont signées à l’aide d’une clé privée détenue par le
serveur. Quand il recevra à nouveau le jeton, le serveur n’aura qu’à comparer la signature envoyée par le
client et celle qu’il aura générée avec sa propre clé privée et à comparer les résultats. Si les signatures sont
identiques, le jeton est valide.
85
Structure d’un jeton JWT
86
Voici un exemple de jeton JWT :
87
2. Création d’un API d’authentification
Dans les chapitres suivants, nous implémenterons l'authentification par e-mail et mot de passe pour
notre API. Cela implique de stocker des mots de passe utilisateur dans notre base de données. Ce que
nous ne voulons certainement pas faire est de les stocker sous la forme de texte brut : quiconque
accéderait à notre base de données verrait la liste complète des informations de connexion de tous les
utilisateurs. À la place, nous stockerons le mot de passe de chaque utilisateur sous la forme d'un hash ou
d'une chaîne chiffrée.
88
Nous utiliserons le package de chiffrement bcrypt pour sécuriser les mots de passe des utilisateurs. Il
transforme les mots de passe en une forme cryptée appelée hash et les stocke dans la base de données.
Lorsqu'un utilisateur se connecte, nous comparons le hash de son mot de passe avec celui stocké.
Cela rend difficile pour les pirates de deviner les mots de passe car les hashs ne sont pas les mêmes
que les mots de passe d'origine. Bcrypt nous aide à stocker et vérifier les mots de passe de manière
sécurisée.
89
Les tokens d'authentification permettent aux utilisateurs de se connecter une seule fois à leur compte. Au
moment de se connecter, ils recevront leur token et le renverront automatiquement à chaque requête par
la suite. Ceci permettra au back-end de vérifier que la requête est authentifiée.
Pour pouvoir créer et vérifier les tokens d'authentification, il nous faudra un nouveau package
90
91
92
3. Middleware d’authentification
Le middleware est une fonction qui a accès au nécessaire, réponse objet et nouvelle fonction
dans le cycle demande-réponse. La fonction suivante est invoquée lorsque l'exécution de la
fonction est terminée. Comme je l'ai mentionné ci-dessus, utilisez next() lorsque vous devez
exécuter une autre fonction de rappel ou une fonction middleware.
Créez maintenant un dossier nommé middleware, et à l'intérieur, créez le nom du fichier comme
auth.js et écrivez le code suivant.
93
94
PARTIE 3: CRÉER DES MICROSERVICES
95
CHAPITRE 1: S’initier aux architectures microservices
Une application monolithique est une application qui est développée en un seul bloc (war, jar
…), avec une même technologie et déployée dans un serveur d’application. Les difficultés
qu’on peut rencontrer avec l’architecture monolithique :
• Complication du déploiement : tout changement dans n’importe quelle module de
l’application nécessite le redéploiement de toute l’application
96
Architecture microservice:
Alors qu’une application monolithique est une seule unité unifiée, une architecture microservices la
décompose en un ensemble de petites unités indépendantes.
Ces unités exécutent chaque processus d’application comme un service distinct. Ainsi, tous les services
possèdent leur propre logique et leur propre base de données et exécutent les fonctions spécifiques.
97
Exemple :
Prenons l’exemple d’un site de vente en ligne des produits: l’application est composée de plusieurs
modules, à savoir : client, produit et facture.
Pour une application monolithique, ces modules seront déployés dans un seul serveur. Et, pour une
architecture microservices, chacun de ces modules constituera un service à part avec sa propre base de
données. Ces services peuvent être déployés dans des infrastructures différents (sur site, en cloud …)
98
2. Concepts de base
Principe :
L'architecture Microservices propose une solution en principe simple : découper une application en
petits services, appelés Microservices, parfaitement autonomes, qui exposent une API que les autres
microservices pourront consommer.
Cette application affiche par exemple un produit à vendre. Cette fiche produit est donc constituée par
exemple d'une photo, d'un descriptif et d'un prix. Dans le schéma, l'interface utilisateur fait appel à un
microservice pour chaque composant à renseigner. Ainsi, celle-ci peut faire une requête REST au
microservice A, qui s'occupe de la gestion des photos des produits, afin d'obtenir celles correspondant au
produit à afficher. De même, les microservices B et C s'occupent respectivement des descriptifs et des prix
99
•Microservice A (gestion des photos) : Ce microservice est chargé de gérer les photos associées aux
produits. Lorsque l'interface utilisateur a besoin d'afficher une photo pour un produit spécifique, elle peut
faire une requête REST à ce microservice pour obtenir les images correspondantes.
•Microservice B (gestion des descriptifs) : Ce microservice est responsable de la gestion des descriptifs
des produits. Lorsque l'interface utilisateur doit afficher le descriptif d'un produit, elle peut interroger ce
microservice pour récupérer les informations nécessaires.
•Microservice C (gestion des prix) : Ce microservice gère les prix des produits. Lorsque l'interface
utilisateur doit afficher le prix d'un produit, elle peut faire appel à ce microservice pour obtenir les données
de tarification.
100
Agilité technologique :
101
Le ‘Time to market’(Le délai entre la naissance d’une idée et son lancement au marché)
• Les microservices peuvent être mis à jour, étendus et déployés indépendamment les uns des autres et
par conséquent, beaucoup plus rapidement
• L’indépendance fonctionnelle et technique des microservices permet l’autonomie de l’équipe en
charge sur l’ensemble des phases du cycle de vie (développement, tests, déploiement, et
exploitation), et favorise par conséquent l’agilité et la réactivité
102
Déploiement ciblé :
• Evolution d’une certaine partie sans tout redéployer: Avec les microservices, il est possible de
faire évoluer une partie spécifique de l'application sans avoir à redéployer l'ensemble du système.
Puisque chaque microservice est indépendant, les mises à jour et les modifications peuvent être
effectuées de manière ciblée, ce qui réduit les risques d'impact sur les autres parties de l'application.
• Un seul livrable à partir d’un seul code source: Chaque microservice est généralement développé
à partir d'un seul code source, ce qui simplifie le processus de livraison. Les équipes peuvent
travailler sur leur microservice de manière isolée et publier des versions indépendantes sans avoir
besoin de coordonner avec d'autres équipes.
103
Mise à l'échelle (Scalabilité up/down) :
Selon le trafic du système, on peut ajouter des instances d’un microservice ou en détruire. Prenons
l’exemple de l’événement «Black Friday » de Amazon :
• Les services produits et commandes, par exemple, seront sollicités plus que les services de
notifications et évaluation.
• Scalabilité up (mise à l'échelle vers le haut) : Pour les microservices tels que la gestion des
produits et des commandes, qui sont plus sollicités pendant le "Black Friday", on peut augmenter le
nombre d'instances de ces microservices pour répondre à la demande accrue. Cela permet de
répartir la charge sur un plus grand nombre de serveurs, ce qui améliore les performances et la
capacité de traitement.
• Scalabilité down (mise à l'échelle vers le bas) : Une fois que l'événement "Black Friday" est
terminé et que le trafic sur le site diminue, on peut réduire le nombre d'instances de ces
microservices pour éviter de gaspiller des ressources informatiques. En supprimant les instances
inutilisées, on libère des ressources et on réduit les coûts d'exploitation.
104
Inconvénient de l’architecture microservices :
Communication complexe entre les services : La gestion des communications entre les services peut
devenir complexe, car chaque service est indépendant et doit être coordonné pour répondre aux
demandes.
Plus de services signifie plus de ressources : Chaque microservice nécessite ses propres ressources, y
compris des bases de données et des gestionnaires de transactions. Gérer plusieurs bases de données
peut être fastidieux et coûteux en termes de ressources.
Tests globaux difficiles : Tester une application basée sur des microservices peut être plus complexe
que dans une approche monolithique. Il faut s'assurer que tous les microservices fonctionnent
correctement ensemble, ce qui peut nécessiter des tests d'intégration et de bout en bout plus élaborés.
Ne s'applique pas à tous les systèmes : L'architecture de microservices n'est pas adaptée à tous les
systèmes. Par exemple, si un système est relativement simple et ne nécessite pas une évolutivité et une
flexibilité élevées, une approche monolithique peut être plus appropriée.
105
Qui utilisent les microservices ?
106
3. Architecture
Communication entre services: On distingue trois types de modes de communication entre services:
• Appel synchrone point à point
• Diffusion de messages asynchrones point à point
• Diffusion d’événements
107
Types de communication entre services: Appel synchrone point à point
108
Types de communication entre services: Appel asynchrone point à point
Ce type de communication est utilisé lorsqu’un service désire envoyer un message à un autre service
Implémentation:
Pour exploiter ce type de communication, on emploie un protocole de transport de messages (AMQP)
109
Types de communication entre services: Diffusion d’événements
Ce type de communication est utilisé quand un service veut notifier tout le système par un
évènement
110
Intermédiaire entre client et microservices:
Une API Gateway est un composant central dans les architectures modernes de microservices et les
environnements cloud. Elle agit comme un point d'entrée unique pour toutes les demandes provenant
des clients vers les différents microservices qui composent le système.
• Couche intermédiaire : Les passerelles API agissent comme une couche intermédiaire entre les
microservices et les applications clientes qui ont besoin d'accéder à ces microservices. Elles
fournissent un point d'entrée unique pour l'ensemble du système, facilitant ainsi la communication
entre les clients et les microservices.
111
• Exposition des points de terminaison : Les API gateways n'exposent que les points de
terminaison nécessaires aux clients. Elles cachent la complexité des microservices en offrant une
interface simple et unifiée pour accéder aux fonctionnalités du système.
• Sécurité et gestion des autorisations : Les passerelles API jouent également un rôle important
dans la sécurité et la gestion des autorisations. Elles peuvent authentifier les utilisateurs, autoriser
l'accès aux microservices en fonction des rôles et des permissions, ainsi que protéger l'ensemble du
système contre les attaques potentielles.
112
4. Exemples
113
114
115
116
117
118
119
120
121
CHAPITRE 2: Créer des microservices
Exemples:
Par exemple, une application de covoiturage peut utiliser une API de paiement en transmettant les
informations de la carte de paiement du client à l'API. Le code derrière l'API peut déduire le
paiement de la carte en toute sécurité et renvoyer une réponse de réussite ou d'échec à l'application
de covoiturage. 122
123
2. Création d’une application en microservices avec Node js
Voici quelques raisons pour lesquelles les microservices avec Node.JS sont le meilleur
choix :
124
Exemple de microservices créés en Node js (Communication synchrone):
• Soit une simple partie d’application e-commerce gérant les produits et leurs commandes;
• L’application sera décomposée, dans un premier temps, en deux miscroservices : produit et
commande;
• Chaque service aura sa propre base de données sous MongoDB
• Les deux services seront considérés comme deux applications séparées, chacune expose son
API et écoute sur son propre port;
125
126
127
128
129
130
Produit-service
localhost:4000/produit/ajouter
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Le code de cet exemple est disponible sous le répertoire: https://gitlab.com/asmae.youala/exp-microservice
148