Skip to content

Latest commit

 

History

History
228 lines (162 loc) · 9.76 KB

README.md

File metadata and controls

228 lines (162 loc) · 9.76 KB

Issues Workflow LinkedIn


Logo

Conférence API

Une API de gestion de conférences

Report Bug · Request Feature

A propos du projet

Illustration

Dans le cadre de notre formation M2 MIAGE, nous avons eu pour projet de créer une API de gestion de conférences.

Ce projet est composée de 2 services :

  • un service d'une banque qui permet de gérer les paiements,
  • un service de gestion des conférences.

Voici les users-stories qui ont été définies :

  • En tant qu'utilisateur, je veux pouvoir m'inscrire afin d'être reconnu par le système.
  • En tant qu'utilisateur, je veux pouvoir faire une recherche de toutes ses sessions de la conférence, afin de pouvoir choisir la ou les sessions qui m'intéressent.
  • En tant qu'utilisateur, je veux pouvoir faire une recherche en séléctionnant une session, afin de savoir s'il reste de la place.
  • En tant qu'utilisateur, je veux sélectionner, à l'issue de ma recherche, une session afin de pouvoir m'inscrire.
  • En tant qu'utilisateur, je veux réserver la session et payer.

Pour mener à bien ce projet, nous devons créer une API RESTful (HATEOAS) qui permettra de gérer les conférences.

Architecture

Tout d'abord, voici l'architecture de notre projet :

Architecture

Il a été demandé que notre projet doit être composé d'au moins 2 services, l'un pour l'API principale et l'autre pour la banque.

Pour ce faire, nous avons mit en place des conteuneurs Docker pour pouvoir lancer et configurer nos services facilement. Aussi, nous avons mit en place un environnement d'intégration continue avec GitHub Actions pour pouvoir tester notre projet à chaque merge request. Enfin, nous avons régulièrement passé le projet sous SonarQube pour vérifier la qualité du code.

Pour simuler les actions de l'utilisateur sur notre API, nous avons mis en place Postman qui nous permet de faire des requêtes HTTP sur l'API.

En ce qui concerne l'architecture interne de notre API principale, elle se décompose en 5 services :

  • KeycloakService : pour configurer Keycloak et gérer les utilisateurs,
  • ConferenceService : pour gérer les conférences,
  • SessionService : pour gérer les sessions,
  • ReservationService : pour gérer les réservations,
  • BankService : pour gérer les paiements.

Architecture_interne

Design de l'API

Pour les routes, nous avons décidé d'empiler les ressources afin de pouvoir faire des requêtes plus précises et sécurisées comme ci-dessous :

Route_API

Il est possible de lire la documentation de l'API en local en se rendant sur l'adresse suivante : http://localhost:3000/v2/api-docs une fois que le projet est lancé.

HATEOAS

Pour que notre API soit RESTful, nous avons mis en place le principe de HATEOAS (Hypermedia as the Engine of Application State).

Le schema ci-dessous représente un exemple d'actions sucessives que peut faire un utilisateur sur notre API :

HATEOAS

Une fois que notre utilisateur a réserver une session, il peut soit payer ou annuler sa réservation.

Ce principe est également appliqué sur les sessions qui renvoient vers la création d'une réservation mais également au niveau de la banque au moment de la création d'un compte pour le ravitailler.

Les technologies utilisées

Nous avons utilisé le langage de programmation Java avec le framework Spring pour concevoir le coeur de notre application.
Java Spring

Pour gérer la documentation de l'API, nous avons utilisé Swagger.
Swagger

Pour gérer l'authentification, nous avons utilisé Keycloak.
Keycloak

Pour gérer les bases de données, nous avons utilisé PostgreSQL (API Conférences) et h2 (API Banque).
PostgreSQL h2

Pour gérer l'intégration continue, la qualité du code et la dockerisation, nous avons utilisé GitHub Actions, SonarQube et Docker.
GitHub Actions Docker SonarQube

Pour gérer les tests, nous avons utilisé JUnit et Mockito.
JUnit Mockito

Pour gérer le monitoring, nous avons utilisé Grafana et Prometheus.
Graphana Prometheus

(back to top)

Pour bien démarrer

Voici les instructions pour pouvoir lancer notre projet en local. Attention, le projet est composé de sous-modules git, pensez à vérifier que vous avez l'entièreté du projet en local.

Version avec docker-compose

Prérequis

  • Docker
  • Docker-compose

Installation

  1. Cloner le repo

     git clone --recurse-submodules [email protected]:Benv547/m2-conference.git
  2. Lancer le projet

    docker-compose up

Version sans docker-compose

Prérequis

  • Docker (ou Keycloak et PostgreSQL)
  • Java 17
  • Maven

Installation

  1. Cloner le repo

     git clone --recurse-submodules [email protected]:Benv547/m2-conference.git
  2. Lancer Keycloak

    Pour facilité la configuration de Keycloak, nous avons mis en place un fichier .json qui permet de créer un realm, ses roles et un client qu'il vous suffit d'importer dans Keycloak.

  3. Lancer PostgreSQL

    Votre base de données doit être nommée conference et votre utilisateur postgres doit avoir le mot de passe postgres. Il est possible de modifier ces paramètres dans le fichier application.properties du module principal.

  4. Installer les dépendances pour chaque sous-module

    mvn install
  5. Lancer chaque sous-module

     mvn spring-boot:run

Il est possible d'ajouter une instance de Graphana et Prometheus pour pouvoir visualiser les métriques de nos services.

(back to top)

Usage

Nous avons mis en place un Postman qui permet de faire des requêtes HTTP sur notre API, un fichier .json est disponible dans le dossier /postman.

Monitoring

Pour visualiser les métriques de nos services, vous pouvez lancer Graphana sur le port 3002 et obtenir les données de Prometheus sur le port 9090.

Graphana