Académique Documents
Professionnel Documents
Culture Documents
conception
Semestre: Printemps 2023
Équipe projet
Audrey SOUPPAYA
Huu Khai NGUYEN
Majed HLAIHEL
1
Sommaire
Sommaire
Introduction
Présentation de l'application
Partie 1 : Maquettes
Partie 2 : Implémentation de l'application
Partie 3 : Présentation de l'application
Architecture de l’application répartie
Diagramme de composants
Détail des interfaces par services mobilisés
Motivation de l'architecture proposée
Patrons de conception
Cache
Service Controller
Service Descriptor
Ouverture de projet
État actuel de projet
Évolution de projet
Conclusion
Bibliographie
Annexes
2
Introduction
Dans le cadre de l’UE LO10 - Architectures orientées services, nous devons
développer une application. L’enjeu de celle-ci est une répartition sur la base
d’une analyse approfondie de l’architecture orientée services web qui supportera
l’application.
Les exigences du projet sont les suivantes :
- une application qui consomme au moins 5 services web tiers
- une architecture avec au moins 3 patrons de conception
Présentation de l'application
Dans le cadre de notre projet de développement logiciel, nous avons conçu une
application de planification de voyage pour faciliter l'organisation et la gestion
des voyages personnels ou en groupe. Cette application vise à offrir une
expérience utilisateur fluide, intuitive et personnalisée pour les voyageurs du
monde entier.
3
L'objectif principal de cette partie du rapport est de présenter les maquettes
initiales de l'application, qui ont servi de base à son développement ultérieur.
Nous mettrons en évidence les différentes interfaces utilisateur conçues pour
répondre aux besoins des voyageurs, en leur offrant une vue d'ensemble de
l'application et en leur permettant de se familiariser avec ses fonctionnalités clés.
Partie 1 : Maquettes
Dans cette partie, nous allons explorer les maquettes de notre application de
planification de voyage. Nous avons défini en premier temps quelques maquettes
initiales en utilisant Figma pour représenter visuellement les différentes
interfaces utilisateur de l'application et se donner un aperçu de son apparence et
de son fonctionnement. Voici quelques interfaces utilisateur en maquettage qui
nous permettrait d’avoir une première vue sur ce que nous allions implémenter
dans le futur:
Figure 2
4
Page “Trip Management”
Figure 3
Figure 4
5
Figure 5
Figure 6
6
Partie 2 : Implémentation de l'application
Données
Pour récupérer les données nécessaires pour notre application de voyage comme
la prédiction de la météo du jour, les lieux à visiter (les restaurants, les hôtels, les
abstractions) à partir de ses coordonnées, et pour faciliter la recherche des places
et l’implémentation de la carte, nous avons pris 4 services d’API tierce suivant qui
sont des données qui viennent à l'extérieur:
● OpenWeatherMap API
● Travel Advisor RapidAPI
● Google Map API
● Google Autocomplete API
Cette intégration des API externes nous permet d’enrichir les fonctionnalités de
l'application avec des données actualisées et des services complémentaires.
7
D’un autre côté, pour simplifier le processus et diminuer le temps de
développement, nous avons décidé en premier temps, de stocker des données
internes de cette application, telles que les informations des utilisateurs et les
détails des voyages dans 2 fichiers du type JSON - users.json et trip.json (les
détails de ces fichiers sont en annexe). Ces fichiers nous permettent de maintenir
comme une base de données locale pour gérer les profils des utilisateurs, leurs
voyages enregistrés, ainsi que les préférences personnelles.
Une fois connectés, les utilisateurs peuvent naviguer entre les différentes pages
grâce à une barre de navigation située en haut de l’interface.
8
Figure 8: Page d'accueil
Par exemple, ils peuvent accéder à la gestion de voyage pour visualiser tous leurs
groupes de voyage en cliquant sur TRIP dans la barre de navigation.
9
Figure 9: Page “TRIPS"
Une fois que les utilisateurs valident la création d'un nouveau groupe, l’interface
de la page est mise à jour avec ce nouveau groupe de voyage.
10
Figure 11: La page TRIPS mise à jour avec un nouveau groupe
En cliquant sur ce nouveau groupe dans la liste de groupe (dans ce cas, c’est le
groupe “Road Trip to Denmark”), nous serons dirigés vers une autre page avec
les informations de base de ce voyage. Nous pouvons voir sur cette page une
sous-barre de navigation qui nous aide à gérer le voyage. La page qu’on voit
actuellement est le “Trip Management”.
11
Figure 12: La page “Trip Management"
(A noter le champs “Invitation Link" pour la démonstration de la partie collaboration de
l'application)
12
Figure 13: La page “Trip Tasks"
Sur cette page, nous pouvons créer une nouvelle tâche et la distribuer à un
membre dans le groupe de voyage. Pour l'instant, il n'y a que le membre
“testuser"
13
Figure 15: La page “Trip Tasks" mise à jour avec une nouvelle tâche
Maintenant, nous allons faire quelques recherches sur les lieux (les restaurants, les
hôtels, etc…) pour le voyage en cliquant sur RESEARCH dans la barre de
navigation. Grâce à Google Autocomplete API, nous pouvons facilement avoir une
liste de suggestions en temps réel quand nous saisissons dans la barre de
recherche
14
En validant une valeur dans la liste de suggestions, les informations par rapport à
la localisation choisie vont afficher sous la forme d'une carte avec l'ensemble des
lieux proposés sur le côté gauche de la carte. De plus nous pouvons faire un
filtrage du type de lieux ainsi que par rapport au rating de lieux comme ci-
dessous:
15
Figure 18: L'ajout d’un lieu dans la page “Trip Itinerary"
Nous pouvons retrouver dont le restaurant enregistré pour le voyage “Road Trip
to Denmark" en revenant de la page la liste de groupes de voyage dans TRIP, et
puis choisir le groupe “Road Trip to Denmark" et finalement en cliquant sur
“Trip Itinerary" dans la sous-barre de navigation:
16
Figure 19: La page “Trip Itinerary" mise à jour avec un lieu enregistré
17
Figure 20: L'authentification de Kaykay
18
Figure 22: Page “Trip Management" de Kaykay
19
De plus, grâce à cela, depuis la page “Trip Tasks", soit de testuser, soit de
Kaykay, nous pouvons distribuer les tâches à ces 2 utilisateurs:
20
Figure 25: La tâche de “Kaykay” est ajoutée sur la fenêtre de “Kaykay” et “testuser”
Nous avons donc décrit les principales fonctionnalités de l'application ainsi que la
façon d'utiliser chaque fonctionnalité. En somme, notre application de
planification de voyage offre une interface conviviale et complète pour simplifier
l'organisation des voyages, facilitant ainsi la création d'itinéraires personnalisés et
la gestion des tâches associées.
21
Architecture de l’application répartie
Diagramme de composants
22
Détail des interfaces par services mobilisés
● OpenWeatherMap
Figure 26
L’interface qu’on utilise dans notre app:
Cette interface fournit plusieurs méthode dont celle qu’on utilise qui permet de
requêter le service à partir de cet endpoint:
https://api.openweathermap.org/data/2.5/weather?
lat={lat}&lon={lon}&appid={API key}
en ajoutant les coordonnées géographique de la localisation et la clé d’api en
paramètre.
La localisation par défaut est celle de l’utilisateur, mais l’utilisateur peut très bien
chercher pour n’importe quelle ville dans le monde, et la localisation envoyée est
celle retrouvée par le service de Google Maps.
Nous utiliserons ensuite les données retrouvés pour afficher certaines
informations concernant la météo sur la carte dynamique.
Ce service REST, grâce à une clé rapidapi, permet de reproduire les données et
fonctionnalités publiques de TripAdvisor - tripadvisor.com.
Elle permet d'interroger en temps réel les prix des vols, la réservation d'hôtels, les
restaurants, les lieux d'attraction, etc.
23
L’interface utilisée:
Figure 27
endpoint hotels:
https://travel-advisor.p.rapidapi.com/hotels/list-in-boundary
endpoint attractions:
https://travel-advisor.p.rapidapi.com/attractions/list-in-boundary
● google-map-react
C’est une librairie tierce pour React qui simplifie le processus d’intégration de
Google Maps dans les applications React. Il agit comme un wrapper de l’api
24
JavaScript de Google Maps, ce qui permet de réduire les complexités du travail
direct avec Google Maps et offrir un moyen plus intuitif.
Cette librairie, grâce à une clé de l’API Google Maps, nous offre les composants
suivants:
● Service de l’application
Pour faire persister et manipuler les données, nous avons créé notre service dédié
à l’application.
L’interface crée:
Figure 28
25
Figure 28
26
Motivation de l'architecture proposée
Au début de projet, lors d’une réunion hebdomadaire, nous avons choisi de suivre
le modèle client-serveur, une architecture classique de l'application du Web avec
ReactJS utilisé pour la partie client, et ExpressJS comme framework côté serveur
ainsi que son environnement d'exécution NodeJS.
Côté serveur, Express est utilisé comme framework d'application web. Il fournit
un ensemble robuste d'outils et de middleware pour gérer les requêtes HTTP, le
routage, la gestion des sessions et l'authentification. Express permet la mise en
œuvre d'API RESTful, permettant au côté client de communiquer avec le serveur
et de récupérer les données selon les besoins.
27
L'architecture proposée, utilisant ReactJS et ExpressJS, a été choisie pour
répondre à plusieurs critères importants en termes de performance, coûts, sûreté
de fonctionnement, maintenabilité et extensibilité.
1. Performance :
● ReactJS offre des performances élevées grâce à son approche de rendu
virtuel et à sa gestion optimisée des mises à jour de l'interface utilisateur.
Cela permet d'obtenir des temps de réponse rapides et une expérience
utilisateur fluide.
● ExpressJS, basé sur Node.js, est réputé pour sa rapidité d'exécution et son
évolutivité, ce qui garantit une gestion efficace des requêtes et une
capacité de traitement élevée.
2. Coûts :
● L'utilisation de ReactJS et ExpressJS, deux technologies open source,
permet de réduire les coûts liés aux licences logicielles.
● Ces frameworks sont également populaires et bénéficient d'une large
communauté de développeurs, ce qui facilite l'accès à des ressources
gratuites, des tutoriels et des conseils, réduisant ainsi les coûts de
formation et de support.
3. Sûreté de fonctionnement :
● L'architecture adopte des mécanismes de gestion de session pour
l'authentification et la sécurisation des ressources. Cela permet de garantir
que seules les personnes autorisées ont accès aux données et aux
fonctionnalités appropriées.
● Les frameworks tels que ExpressJS sont bien établis et bénéficient d'une
réputation solide en termes de sécurité, ce qui renforce la sûreté de
fonctionnement de l'application.
4. Maintenabilité :
28
● L'approche basée sur des composants de ReactJS permet de développer
l'application de manière modulaire et réutilisable. Cela facilite la
maintenance du code, car les composants peuvent être développés, testés
et mis à jour indépendamment les uns des autres.
● ExpressJS, avec son architecture basée sur des middlewares, facilite
également la maintenance en permettant d'ajouter, de modifier ou de
supprimer des fonctionnalités de manière modulaire, sans impacter le
reste du système.
5. Extensibilité :
● L'architecture modulaire de ReactJS et ExpressJS permet d'ajouter
facilement de nouvelles fonctionnalités à l'application. Les composants
React peuvent être étendus ou réutilisés pour répondre à de nouveaux
besoins, tandis que les middlewares d'Express permettent de gérer de
manière flexible les requêtes et les fonctionnalités supplémentaires.
29
Patrons de conception
Cache
Dans le cadre de notre projet, ce pattern est très intéressant puisque les API
Cas 1 : Si les données ne sont pas présentes dans le cache, on effectue une
requête à l'API Google Maps pour obtenir les données nécessaires qui seront
stockées dans le cache pour une utilisation ultérieure.
30
Service Controller
31
Par exemple, le UserController gère les opérations d'authentification des
utilisateurs, telles que la connexion et la déconnexion. Il utilise des méthodes
login et logout pour effectuer ces opérations.
32
Service Descriptor
Dans notre projet, nous utilisons le Service Descriptor pour fournir une
description standardisée et lisible par machine de l'interface de service pour
faciliter la découverte et l'interopérabilité des services au sein de notre
application.
Pour implémenter Service Descriptor, nous avons utilisé OpenAPI (Swagger), qui
fournit un format lisible par machine pour décrire les API RESTful, y compris des
informations sur les points de terminaison, les paramètres, les formats de requête
et de réponse, et les mécanismes d'authentification. Nous avons créé un fichier
du format YAML pour décrire notre API, y compris les endpoints, les paramètres,
les réponses et les schémas. Nous avons ensuite utilisé les packages yamljs et
swagger-ui-express pour charger la spécification OpenAPI et afficher la
documentation dans une interface utilisateur conviviale.
33
Figure : Les réponses de GET /api/trips
Ouverture de projet
34
Évolution de projet
En termes de potentiel d'évolution, voici quelques points à considérer :
2. Renforcement de la sécurité :
Pour assurer la sécurité des utilisateurs et de leurs données, nous pouvons
implémenter des mesures supplémentaires telles que le hash de mots de passe,
le chiffrement des données sensibles comme les informations d’utilisateurs, la
gestion des autorisations d'accès, la protection contre les attaques courantes
telles que les attaques par injection SQL ou les attaques de contournement
d'authentification.
4. Tests et maintenance :
Il est essentiel d'effectuer des tests approfondis pour identifier et résoudre les
éventuels problèmes ou bugs. Nous devrions donc mettre en place des tests
unitaires, des tests d'intégration et des tests de performance pour garantir le bon
fonctionnement de l'application. En outre, la maintenance continue est
35
nécessaire pour appliquer des correctifs de sécurité, gérer les mises à jour des
dépendances et prendre en compte les commentaires des utilisateurs.
36
Conclusion
En conclusion, notre projet de développement logiciel dans le cadre de LO10 a
abouti à la création d'une application de planification de voyage complète et
conviviale. Grâce à une architecture orientée services Web soigneusement
analysée, nous avons réussi à répondre aux exigences du projet, notamment en
intégrant 4 services d'API et en utilisant 3 patrons de conception.
37
application de planification de voyage répond aux besoins des utilisateurs en
offrant une solution complète et pratique pour organiser leurs voyages.
Bibliographie
OpenWeatherMap API
Travel Advisor RapidAPI
Google Map API (voir documentation pour générer une clé API)
Google Autocomplete API
Service Design Pattern
38
Annexes
Annexe 1: Fichier users.json
39
Annexe 2: Fichier trip.json (un petit morceau pour démontrer la structure de
données)
40
41