You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.7 KiB

# 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)