# TP5 : API Platform ## Objectifs Les objectifs de ce TP sont : - Se familiariser avec API Platform. - Créer une API REST pour des opération de CRUD. - Comprendre les liens entre API Platform, Symfony et Doctrine ## Consignes - Durée : 2 heures - Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. - N'utilisez PAS le serveur `londres.uca.local` pour tester vos pages mais la commande `symfony server:start`. - Nous allons continuer notre réseau social nommé `TweetTok` où les messages sont nommés des `Twok`. - Lors du précédent TP, nous avons réalisé un site permettant des fonctions de CRUD. - Nous allons maintenant implémenter une API REST pour l'administration. - Créez un NOUVEAU projet `TweetTokAPI` en parallèle de votre précédent projet `TweetTok`. ## Ressources - Documentation d'API Platform : [https://api-platform.com/docs/distribution/](https://api-platform.com/docs/distribution/) ## Partie 1 : Installation de API Platform (15 min) 1. Installation - Installer API Platform via Composer : ```bash symfony new TweetTokAPI cd TweetTokAPI symfony composer require api symfony composer require symfony/orm-pack symfony composer require --dev symfony/maker-bundle ``` - Comparez la structure des répertoires du projet API par rapport au projet de site web `TweetTok`. Quels dossiers sont en plus/moins ? Le projet est-il plus lourd ou plus léger ? 2. Configurer la Base de Données : - Configurer le projet pour SQLite ou POSTGRE (la même que pour les TPs précédents) : - Si POSTGRE : ```bash DATABASE_URL="postgresql://VotreUser:VotrePass@londres/dbVotreUser" ``` - Si SQLite : ```bash # fichier .env DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" ``` ```bash # On fait un lien symbolique de la BDD. # En pratique SQLite est à proscrire pour une archi micro-services. cd var && ln -s ../../TweetTok/var/data.db . ``` - Copiez le dossier `migrations` de votre projet `TweetTok` dans `TweetTokAPI`. - Créez un lien symbolique des fichiers `TweetTok/src/Entity/Twok.php` et `TweetTok/src/Repository/TwokRepository.php` dans le nouveau projet `TweetTokAPI`. - Effectuer les migrations pour configurer la base de données : ```bash symfony console doctrine:database:create symfony console doctrine:migrations:migrate ``` ## Partie 2 : Création de Ressources pour l'API (30 minutes) 1. Déclarez l'entité `Twok` comme une ressource API et ajoutez des contraintes sur ses différents champs. 2. Testez votre API avec la page web (route `/api`) : - Si vous voyez les messages déjà insérés; - Si vous pouvez insérer un nouveau message; - Si vous pouvez modifier/remplacer un message existant; - Si vous pouvez supprimer un message existant; 3. Effectuez les mêmes tests avec les commandes cURL fournies : - Comprenez-vous les options de cURL dans la commande ? - Comprenez-vous la réponse de cURL ? 4. Insérez/Supprimez un message directement dans la BDD avec SQLite/POSTGRE : - Que constatez-vous ? ## Partie 3 : Génération de Code Client API 1. Utilisez API Platform pour générer le code d'un client de l'API dans le framework de votre choix 2. Validez que vous pouvez interagir avec l'API (lister, créer, supprimer, modifier, etc). ## Partie 4 : Pour aller plus loin 1. Renseignez-vous sur la création d'une classe de validation de contraintes personnalisée : [https://symfony.com/doc/5.x/validation/custom_constraint.html](https://symfony.com/doc/5.x/validation/custom_constraint.html). 2. Implémentez une validation personnalisée pour bloquer des messages contenant des mots interdits (ex: contenu insultant)