« Programmation PHP avec Symfony/API » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 60 : Ligne 60 :
* @return View
* @return View
*/
*/
public function postArticle(Request $request): View
public function test(Request $request): View
{
{
return View::create('ok');
return View::create('ok');

Version du 31 mars 2019 à 11:22

Installation

Pour créer une interface de programmation (API) REST avec Symfony :

    composer require "friendsofsymfony/rest-bundle"

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. Voici un exemple avec

<?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 test(Request $request): View
    {
        return View::create('ok');
    }
}

Références