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