Différences entre les versions de « Programmation PHP/Symfony/API »

aucun résumé de modification
m (<source> -> <syntaxhighlight> (phab:T237267))
<noinclude>{{PHP}}</noinclude>
 
== Installation ==
Pour créer une {{w|interface de programmation}} (API) {{w|Representational state transfer|REST}} avec Symfony, il existe plusieurs bibliothèques :
* API Platform<ref>https://api-platform.com/</ref>, tout-en-un qui utilise les annotations des entités pour créer les APIs (donc pas besoin de créer des contrôleurs ou autres). Par défaut il permet de sérialiser les flux en JSON (dont JSON-LD, JSON-HAL, JSON:API), XML (dont HTML), CSV et YAML<ref>https://api-platform.com/docs/core/content-negotiation/</ref>.
* Sinon il faut combiner plusieurs éléments : routeur, générateur de doc en ligne et sérialiseur. En voici un exemple :
 
=== FOSAPI RESTPlatform ===
=== Installation ===
<syntaxhighlight lang=bash>
composer require api
</syntaxhighlight>
 
== Utilisation ==
API Platform se configure par des annotations dans les entités.
 
=== Annotations ===
==== MaxDepth() ====
Définit le niveau de sérialisation d'un élément lié. Par exemple, si un client a plusieurs contrats et que ses contrats ont plusieurs produits, un ''MaxDepth(1)'' sur l'attribut ''client->contrat'' fera que la liste des clients comprendra tous les contrats mais pas leurs produits.
 
=== Avec le tripletTriplet de bibliothèques ===
=== Installation ===
==== FOS REST ====
FOSRestBundle apporte des annotations pour créer des contrôleurs d'API<ref>https://github.com/FriendsOfSymfony/FOSRestBundle</ref>. Installation :
<syntaxhighlight lang=bash>
</syntaxhighlight>
 
==== Doc ====
Toute API doit exposer sa documentation avec ses routes et leurs paramètres. NelmioApiDocBundle est un de générateur de documentation automatique à partir du code<ref>https://github.com/nelmio/NelmioApiDocBundle</ref>, qui permet en plus de tester en ligne. En effet, pour éviter de tester les API en copiant-collant leurs chemins dans une commande {{w|cURL}} ou dans des logiciels plus complets comme Postman<ref>https://www.postman.com/</ref>, on peut installer une interface graphique ergonomique qui allie documentation et test en ligne :
<syntaxhighlight lang=bash>
A ce stade l'URL /api/doc affiche juste un lien ''NelmioApiDocBundle''.
 
==== Sérialiseur ====
Enfin pour la {{wt|sérialisation}}, on distingue plusieurs solutions :
* symfony/serializer, qui donne des contrôleurs <code>extends AbstractFOSRestController</code> et des méthodes aux annotations <code>@Rest\Post()</code><ref>https://www.thinktocode.com/2018/03/26/symfony-4-rest-api-part-1-fosrestbundle/</ref>.
* Le service <code>fos_rest.service.serializer</code>.
 
===== symfony/serializer =====
<syntaxhighlight lang=bash>
composer require "symfony/serializer"
</syntaxhighlight>
 
===== jms/serializer-bundle =====
<syntaxhighlight lang=bash>
composer require "jms/serializer-bundle"
</syntaxhighlight>
 
=== Utilisation ===
 
=== Avec le triplet de bibliothèques ===
Maintenant /api/doc affiche les méthodes des différents contrôleurs API. Voici un exemple :