Attendus du projet, suivi et soutenance
Le projet
L'objectif du projet est de mettre en œuvre conjointement les compétences acquises sur les 2 parties du cours.
Vous devez écrire une application Java comportant une partie serveur, utilisant une base de données SQL, et accessible sur Internet via une API que vous décrirez avec OpenAPI. Votre application devra également comporter une partie client (écrite en Python ou en Java) qui ne communiquera avec la partie serveur que via les points de service exposés et qui conduira à écrire ou lire des informations dans la base du serveur.
Vous êtes libres du thème de l'application. Exemples :
- Le serveur gère une base d'activités physiques réalisées par l'utilisateur, et offre au client la possibilité de récupérer la liste de toutes les activités, éventuellement filtrées, ou des statistiques hebdomadaires ou mensuelles qu'il calcule. Le client permet à l'utilisateur de saisir une nouvelle séance de sport ou de visualiser ses progrès avec un graphique réalisé avec les données stockées sur le serveur.
- Le client interroge un service web public fournissant des questions de type "trivial pursuit", présente 10 questions à l'utilisateur et établit son score. Puis le client envoie ce score au serveur, avec l'identité de l'utilisateur. Le serveur maintient une base permettant de savoir quel joueur a le meilleur score, quel joueur joue le plus souvent etc. Quand l'utilisateur démarre le client, il voit son classement par rapport aux autres joueurs, transmis par le serveur.
Le plus important n'est pas de concevoir une application très complète en termes de données (par exemple la base d'activités physiques peut être limitée à une table où on stocke la date de l'activité, sa durée et sa nature) ou fonctionnalités (par exemple on peut se contenter de calculer la durée hebdomadaire d'activité) mais bien de mettre en œuvre toute la chaîne, avec les technologies présentées en classe. Ainsi votre projet devra :
- comporter un serveur d'applications Tomcat déployé sur le réseau (la partie présentation des données de l'application sera réalisée selon le modèle MVC)
- comporter une base de données SQL (le lien entre la base de données et l'application se fera avec un ORM)
- exposer les fonctions du serveur selon les principes de l'architecture REST
- spécifier en OpenAPI l'API permettant d'exploiter le serveur
- comporter une application cliente écrite en Java ou Python interagissant avec le serveur
Déroulé et suivi du projet
Vous devez dès la première séance de travail sur le projet créer un nouveau dépôt sur gitlab-student.centralesupelec.fr et ajouter Michel Ianotto et Virginie Galtier comme membres avec le rôle Maintainer.
Vous devez travailler sur votre projet régulièrement, au fil des séances. Les projets dont nous ne pourrons pas contrôler l'avancement et que nous découvrirons lors de la soutenance seront pénalisés.
Nous réserverons au cours de plusieurs séances du temps pour vous aider avec plusieurs jalons :
- 12/04 : création du Git et dépôt d'un fichier décrivant en langage courant le but de l'application. On précisera les informations stockées par la BD, les services que le client pourra demander au serveur, et les interactions possibles entre le client et son utilisateur. Dans les jours qui suivent vous pourrez progressivement préciser le schéma de la BD (nom des tables, et pour chaque table nom des colonnes, types des valeurs stockées, éventuelles contraintes etc Cf cours de SIP de 1A), le nom des services rendus par le serveur avec les données attendues en entrée et le type de résultat retourné, ainsi qu'une maquette du client : à quoi ressemblera un "dialogue" si l'interface est uniquement textuelle, ou croquis à main levée des fenêtres si vous prévoyez de développer une interface graphique.
- 15/05 : implémentation du serveur et test de l'API en utilisant l'utilitaire curl ou un navigateur muni d'une extension type RESTer
- 17/05 : description des services dans un document OpenAPI
- 22/05 : implémentation du client et test de l'application complète
- 01/06 : soutenance des projets
Soutenance
Vous présenterez votre projet lors d'une soutenance qui aura lieu après l'examen écrit le 1er juin. L'ordre de passage vous sera précisé ce jour-là. Soyez prêt à présenter en 10 minutes, suivies de 10 minutes de questions. Les 2 membres du binôme devront s'exprimer. La présentation comportera :
- une démonstration : veillez à arriver "prêts" : les services doivent être déployés et démarrés, votre base de données doit éventuellement déjà contenir des données etc. Attention, la durée allouée à chaque soutenance est relativement courte, vous n'aurez pas le loisir de "réparer" si la démo plante. Pour mitiger le risque de "l'effet démo", vous pouvez avoir sous le coude une vidéo d'une minute de votre démo.
- une vue statique de l'architecture : faites apparaître les composants d'un point de vue macro et leur localisation (par exemple : le client tourne en local sur mon PC, le serveur de questions Trivial Pursuit est sur Internet, et j'ai déployé mon serveur "champions" dans le cloud Heroku), et représentez sommairement les échanges (par exemple, mon client interagit avec le serveur de questions (en lecture) et interagit avec mon serveur "champions" (en écriture et lecture), et en bonus le serveur "champions" peut aussi être accédé en lecture via le navigateur de ma machine). Ensuite, sur un autre transparent, détaillez l'architecture de votre serveur en décrivant les éléments (servlet, pages JSP, classes,...) qui composent chaque couche du serveur (couche présentation des données, couche métier et couche d'accès aux données).
- une vue dynamique d'un scenario : cette fois mettez en évidence la nature des interactions entre les composants et leur chronologie. Par exemple mon client commence par envoyer une requête GET au serveur de questions, puis il affiche la question et lit la réponse choisie par l'utilisateur, puis il envoie une requête POST à mon serveur "champions" qui reçoit le score et le stocke dans la base de données. Si vous avez des notions d'UML, les diagrammes de séquence sont bien adaptés pour représenter cette vue dynamique ; des exemples de diagrammes de séquences sont donnés dans l'étude de cas sur la gestion du carnet d'adresses.
- une rapide présentation du schéma de la base de données
- une rapide présentation du fichier de description du service OpenAPI (visualisez-le avec un outil type Swagger)
- une présentation des outils utilisés (par exemple la bibliothèque json pour la manipulation de JSON, Swagger Editor pour la génération du squelette du code du client etc).
- un slide de conclusion indiquant ce que vous avez le plus apprécié dans la réalisation de ce projet et ce qui vous a semblé le plus difficile ou pénible