L’idée de ce billet sur l’installation d’API Platform sur un projet Symfony 3.4 m’est venue lors de la réalisation d’une conférence avec l’association Ardèch’Drôm Dev sur ce même sujet.
La vidéo est disponible sur le lien suivant : Conférence API Platform
Tout est parti d’une idée simple: comment puis-je mettre en place une API Rest avancée sur une projet Symfony 3.4 déjà réalisé ? Trois solutions sont alors disponibles :
Étant donné que je suis un grand amateur de nouvelles solutions, je me suis laissé séduire et j’ai fini par mettre le nez dans la solution. Premier constat : “READ THE F*CKING MANUAL”. Mais What ?! La doc est magnifique, un vrai régal pour les yeux (https://api-platform.com/docs/). Un moteur de recherche simple pour trouver tout ce dont on a besoin. Une version get started sur Docker, super bien réalisée, avec une compatibilité Kubernetes. Bref le décor parfait… Parfait oui, mais pour Symfony 4. Ou un projet vierge.
Impensable pour moi. Mon projet était déjà en place depuis bien longtemps. Une flemmingite aigüe commença à monter en moi. Mais bon, l’envie étant plus forte que tout… Et j’ai pris mon courage à deux mains !
Je me suis mis en quête de mettre ça en place sur tous mes projets personnels et, tant qu’à faire, rédiger un guide d’installation d’Api Platform sur ma stack actuel Symfony 3.4. En avant Guingamp…
Je plante le décor :
Projet e-commerce from scratch maison
Bref rien de transcendant, la stack habituel des familles.
Maintenant, comment je vais rajouter API Platform à tout ça ?
composer require api |
AHHHH la bonne blague ! Je n’ai pas Flex sur mon projet… Mais alors comment faire ? Je ne vous cache pas que j’ai cherché quelques heures et fait un Diff entre un projet vierge de Symfony 3.4 et Symfony 4, je suis tombé sur la conclusion suivante :
Pour ce faire il faut :
Merci Composer !
Ensuite, modification du AppKernel, puis toute la petite configuration qui va bien :
Pour expliquer, ce petit bout de configuration sur “sensio_framework_extra” n’est pas lié à API Platform. Cette configuration permet d’injecter mes entités directement à mes controllers sans être obligé d’utiliser l’Annotation @ParamConverter, mais tout est expliqué ici.
Cette configuration a plusieurs intérêts. Le premier c’est de pouvoir diffuser votre API sur l’entrypoint /api mais cela permet également d’exposer, grâce à API Platform, un client WEB Swagger (https://swagger.io/), permettant d’avoir une version documentée de votre API, diffusable ou non 😉.
Et maintenant il n’y a plus qu’à !
Voilà ! On ne s’est pas froissé un muscle et tout est prêt pour développer mon API.
Qu’est ce qu’il me reste à faire maintenant ? Si vous utilisez les annotations, la manip est très simple : il vous suffit d’ajouter l’annotation @ApiResource à la classe de votre entité.
Mais ne soyons pas trop gourmands pour aujourd’hui. Nous verrons dans un prochain article comment implémenter API Platform.