« Programmation PHP avec Symfony/API » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 4 : | Ligne 4 : | ||
Pour créer une {{w|interface de programmation}} (API) {{w|Representational state transfer|REST}} avec Symfony : |
Pour créer une {{w|interface de programmation}} (API) {{w|Representational state transfer|REST}} avec Symfony : |
||
=== FOS REST === |
|||
<source lang=bash> |
<source lang=bash> |
||
composer require "friendsofsymfony/rest-bundle" |
composer require "friendsofsymfony/rest-bundle" |
||
</source> |
</source> |
||
Puis dans <u>config/packages/fos_rest.yaml</u> : |
|||
<source lang=yaml> |
|||
fos_rest: |
|||
view: |
|||
view_response_listener: true |
|||
format_listener: |
|||
rules: |
|||
- { path: '^/', priorities: [ 'html', '*/*'], fallback_format: ~, prefer_extension: true } |
|||
- { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] } |
|||
</source> |
|||
=== Doc === |
|||
Pour éviter de tester les API en copiant-collant leurs chemins dans une commande {{w|cURL}} ou des outils comme Postman, on peut installer une interface graphique ergonomique, qui peut également faire office de documentation : |
Pour éviter de tester les API en copiant-collant leurs chemins dans une commande {{w|cURL}} ou des outils comme Postman, on peut installer une interface graphique ergonomique, qui peut également faire office de documentation : |
||
<source lang=bash> |
<source lang=bash> |
Version du 2 avril 2019 à 21:41
Installation
Pour créer une interface de programmation (API) REST avec Symfony :
FOS REST
composer require "friendsofsymfony/rest-bundle"
Puis dans config/packages/fos_rest.yaml :
fos_rest:
view:
view_response_listener: true
format_listener:
rules:
- { path: '^/', priorities: [ 'html', '*/*'], fallback_format: ~, prefer_extension: true }
- { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] }
Doc
Pour éviter de tester les API en copiant-collant leurs chemins dans une commande cURL ou des outils comme Postman, on peut installer une interface graphique ergonomique, qui peut également faire office de documentation :
composer require "nelmio/api-doc-bundle"
Son URL se configure ensuite dans routes/nelmio_api_doc.yml :
app.swagger_ui:
path: /api/doc
methods: GET
defaults: { _controller: nelmio_api_doc.controller.swagger_ui }
A ce stade l'URL /api/doc affiche juste un lien NelmioApiDocBundle.
Sérialiseur
Enfin pour la sérialisation, on distingue plusieurs solutions :
- symfony/serializer, qui donne des contrôleurs
extends FOSRestController
et des méthodes aux annotations@Rest\Post()
[1]. - jms/serializer-bundle, avec des contrôleurs
extends RestController
et des méthodes aux annotations@ApiDoc()
. - Le service
fos_rest.service.serializer
.
symfony/serializer
composer require "symfony/serializer"
jms/serializer-bundle
composer require "jms/serializer-bundle"
Utilisation
Maintenant /api/doc affiche les méthodes des différents contrôleurs API. Voici un exemple :
<?php
namespace App\Controller;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\View\View;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class APIController extends FOSRestController
{
/**
* Test the API
* @Route("/api/test", methods={"GET"})
* @param Request $request
* @return View
*/
public function testAction(Request $request): View
{
return View::create('ok');
}
}
Maintenant dans /api/doc, cliquer sur /api/test, puis "Ty it out" pour exécuter la méthode de test.