4.0 KiB
TP4 : API Platform
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license.
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 à NE PAS placer votre dossier~/public_html
(pour cause de quotas sur les machines de l'IUT). - N'utilisez PAS le serveur
londres.uca.local
pour tester vos pages mais la commandesymfony server:start
. - Nous allons continuer notre réseau social nommé
TweetTok
où les messages sont nommés desTwok
. - 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 projetTweetTok
.
Ressources
- Documentation d'API Platform : https://api-platform.com/docs/distribution/
Partie 1 : Installation de API Platform (15 min)
- Installation
- Installer API Platform via Composer :
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 ?
- 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 :
DATABASE_URL="postgresql://VotreUser:VotrePass@londres/dbVotreUser"
- Si SQLite :
# fichier .env DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# 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 .
- Si POSTGRE :
- Copiez le dossier
migrations
de votre projetTweetTok
dansTweetTokAPI
. - Créez un lien symbolique des fichiers
TweetTok/src/Entity/Twok.php
etTweetTok/src/Repository/TwokRepository.php
dans le nouveau projetTweetTokAPI
. - Effectuer les migrations pour configurer la base de données :
symfony console doctrine:database:create symfony console doctrine:migrations:migrate
Partie 2 : Création de Ressources pour l'API (30 minutes)
-
Déclarez l'entité
Twok
comme une ressource API et ajoutez des contraintes sur ses différents champs. -
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;
-
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 ?
-
Insérez/Supprimez un message directement dans la BDD avec SQLite/POSTGRE :
- Que constatez-vous ?
Partie 3 : Génération de Code Client API
-
Utilisez API Platform pour générer le code d'un client de l'API dans le framework de votre choix
-
Validez que vous pouvez interagir avec l'API (lister, créer, supprimer, modifier, etc).
Partie 4 : Pour aller plus loin
-
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.
-
Implémentez une validation personnalisée pour bloquer des messages contenant des mots interdits (ex: contenu insultant)