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.

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

Partie 1 : Installation de API Platform (15 min)

  1. 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 ?
  1. 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 .
      
  • 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 :
    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.

  2. Implémentez une validation personnalisée pour bloquer des messages contenant des mots interdits (ex: contenu insultant)