Projet - Site de critiques API REST, Symfony, Vue.js, Client-Serveur

Sujet - Site de critiques

Ce projet se fera en quadrinôme (et exceptionnellement en trinôme) et s’intéressera au développement de deux applications qui vont communiquer entre elles en utilisant les différentes technologies que nous avons abordées pendant ce cours : Symfony, API Platform et Vue.js.

L’objectif est de développer :

Le choix du thème est “semi-libre” (ou semi-imposé si vous préférez :P) : nous allons vous donner une description générale du thème du service à développer et vous devrez vous-même le préciser. Nous allons en reparler dans la section suivante.

API REST de “Critiques” (Symfony + API Platform)

La première partie consiste donc au développement d’une API REST autour du thème des critiques en utilisant Symfony et API Platform, comme dans le TD4.

L’idée est que vous choisissiez un type “d’objet critiquable” sur lequel portera votre application (par exemple des films, ou bien des livres, des établissements, des jeux-vidéos, ce que vous voulez tant que c’est validé par votre enseignant). Par la suite, quand on parlera d’objet critiquable, on parlera donc du type d’objet sur lequel porte l’application.

Voici les détails de l’API REST qui devra être développée :

Attention, le thème que vous allez choisir doit être soumis à la validation de votre enseignant. Il est interdit de prendre un sujet déjà pris par une autre équipe de votre groupe TD. Premiers arrivés, premiers servis !

Vous serez attentif à ce que votre projet contienne :

La seconde partie du projet consistera à la réalisation d’une interface (front-end en Vue.js) qui exploitera/consommera votre API.

Pour vous aider dans la réalisation du projet, voici quelques pistes :

Attention : suite à une mise à jour de doctrine, il semble qu’actuellement API Platform a du mal à s’installer sur la version 6.4 de Symfony.

Il existe deux solutions :

Installer la précédente version de doctrine (qu’on utilisait en TD) avant d’installer le package api :

composer create-project symfony/skeleton:"6.4.*" nom_api
cd nom_api
composer require doctrine/dbal:"^3"
composer require api
composer require symfony/apache-pack 

Ou bien passer à la version 7.3 lors de l’installation (cela n’a pas été testé en profondeur, mais il semble que toutes les autres dépendances fonctionnent bien avec cette version) :

composer create-project symfony/skeleton:"7.3.*" nom_api
cd nom_api
composer require api
composer require symfony/apache-pack 

Toutefois, avec cette version de symfony et de doctrine, il faut impérativement spécifier la version de la base de données (dans le .env). Celle utilisée en locale est la version 9.4.0 de MySQl ce qui devrait donc donner :

DATABASE_URL="mysql://root:root@db:3306/nom_base?serverVersion=9.4.0"

Pour la base de données de l’IUT, il s’agit de mariadb-10.5.

Application cliente (Vue.js)

La seconde partie du projet consiste à développer une application front-end en Vue.js permettant d’exploiter votre API de critique ! Globalement, c’est toute l’idée du TD3 où on construit le front-end de The Feed.

On attend de vous que vous exploitiez au mieux le concept de réactivité que nous avons exploré pendant les cours associés.

Là-aussi, il faudra adapter la présentation de l’interface au thème choisi. Vous n’allez pas présenter de la même façon un site permettant de gérer des critiques de films qu’un site permettant de critiquer des jeux-vidéos.

Ce front devra donc permettre d’utiliser les fonctionnalités suivantes :

Vous serez attentif à ce que votre projet contienne :

Hébergement des applications

Vous devrez héberger les deux applications (front-end et back-end) dans le dossier public_html d’un des membres de l’équipe (pas nécessairement le même pour toutes les applications).

Attention, vous n’avez qu’une seule base MySQL chacun et vous ne pourrez pas déployer vos deux projets Symfony sur la même base. Vous pouvez soit utiliser la base d’une autre membre du groupe pour le deuxième projet ou simplement utiliser des bases SQLite.

Pour pouvoir accéder à votre home à distance et y déposer des fichiers, il faudra d’abord trouver vos identifiants de connexion login et mot de passe.

Vous pourrez utiliser FileZilla (il faudra certainement l’installer) pour déposer des fichiers dans votre dossier ~/public_html sur le serveur de l’IUT. Pour vous connecter, il faudra choisir comme protocole SFTP, comme hôte ftpinfo.iutmontp.univ-montp2.fr et vous devrez utiliser votre login et mot de passe. Vous pouvez alors facilement déplacer des fichiers de votre machine vers votre home.

Vous aurez surtout besoin de vous connecter en ssh pour pouvoir exécuter les commandes nécessaires au bon déploiement. Vous pouvez d’ailleurs utiliser git depuis ssh pour récupérer vos projets sans utiliser FTP. Pour les projets Symfony, il faudra notamment faire les composer install et probablement créer les bases. Pour le projet Vue, vous pouvez normalement copier directement la version build du projet.

Sous Linux, la commande vous permettant de vous connecter au serveur est la suivante (en remplaçant mon_login_IUT par votre login)

ssh mon_login_IUT@162.38.222.93 -p 6666

Il faudra ensuite entrer votre mot de passe et répondre “yes” à la question “Are you sure you want to continue connecting”. Vous êtes alors connectés en ssh et les commandes que vous tapez sont exécutées sur la machine cible. Vous pouvez alors procéder au déploiement de votre site.

Il faudra aussi certainement donner les droits au serveur Apache de lire vos fichiers. Pour cela depuis le terminal connecté en ssh vous pourrez utiliser les deux commandes suivantes :

   # On modifie (-m) récursivement (-R) les droits r-x
   # de l'utilisateur (u:) www-data
   setfacl -R -m u:www-data:r-x ~/public_html
   # On fait de même avec des droits par défaut (d:)
   # (les nouveaux fichiers prendront ces droits)
   setfacl -R -m d:u:www-data:r-x ~/public_html

Concernant l’API REST développée avec Symfony, elle devra être déployée en environnement prod (et pas dev). Vous devrez aussi renforcer la sécurité en interdisant l’accès aux autres répertoies que public en ajoutant un fichier .htaccess qui contient l’instruction Require all denied à la racine de votre projet et en ajoutant Require all granted au début du fichier .htaccess contenu dans public. Cela permettra notamment d’éviter que n’importe qui puisse lire le contenu de votre fichier .env, par exemple.

Il faudra bien vérifier que vos applications sont accessibles depuis l’extérieur de l’IUT sur l’adresse : http://webinfo.iutmontp.univ-montp2.fr/~login_depot/sous-adresse-du-projet.

Concernant la base de données, vous pourrez utiliser la base de données MySQL ou PostgreSQL d’un des membres de l’équipe, mises à dispositions par l’IUT.

Vous trouverez toutes les informations à propos de la connexion aux bases de données sur l’intranet du département informatique.

Des sources complémentaires sur comment se connecter en FTP et en SSH à public_html (pour y déposer des fichiers) :

Rendu

La deadline du projet est le mardi 6 janvier, 23h59.

Le projet sera à rendre sur Moodle (l’adresse sera fournie ultérieurement). Un seul membre du groupe dépose une archive zip nommée selon le format : NomPrenomMembre1-NomPrenomMembre2-NomPrenomMembre3-NomPrenomMembre4.zip.

Cette archive devra contenir :

Déroulement du projet et accompagnement

Le projet donnera lieu à 2 notes, une note pour chaque partie.

Attention, il y a beaucoup à faire, répartissez-vous bien les tâches.

Aussi, c’est un projet assez conséquent et en équipe : cela signifie donc des outils de gestions appropriés (Trello par exemple ?) et surtout l’utilisation et la bonne organisation d’un dépôt git. Il faudra donc utiliser et bien organiser un dépôt sur le Gitlab du département.

N’hésitez pas à poser des questions à votre enseignant chargé de TD et à montrer votre avancement ! Bon projet.