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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Ligne 7 : Ligne 7 :


=== FOS REST ===
=== FOS REST ===
FOSRestBundle apporte les encodages pour API<ref>https://github.com/FriendsOfSymfony/FOSRestBundle</ref>. Installation :
FOSRestBundle apporte des annotations pour créer des contrôleurs d'API<ref>https://github.com/FriendsOfSymfony/FOSRestBundle</ref>. Installation :
<source lang=bash>
<source lang=bash>
composer require "friendsofsymfony/rest-bundle"
composer require "friendsofsymfony/rest-bundle"

Version du 13 février 2020 à 10:04

Installation

Pour créer une interface de programmation (API) REST avec Symfony, il existe plusieurs bibliothèques :

  • API Platform[1], 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).
  • Un ensemble de trois éléments : encodeur, générateur de doc en ligne et sérialiseur.

FOS REST

FOSRestBundle apporte des annotations pour créer des contrôleurs d'API[2]. Installation :

    composer require "friendsofsymfony/rest-bundle"

Puis dans config/packages/fos_rest.yaml :

fos_rest:
    view:
        view_response_listener:  true
    format_listener:
        rules:
            - { path: '^/',  prefer_extension: true, fallback_format: ~, priorities: [ 'html', '*/*'] }
            - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] }

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[3], qui permet en plus de tester en ligne. En effet, pour éviter de tester les API en copiant-collant leurs chemins dans une commande cURL ou dans des logiciels plus complets comme Postman[4], on peut installer une interface graphique ergonomique qui allie documentation et test en ligne :

    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 AbstractFOSRestController et des méthodes aux annotations @Rest\Post()[5].
  • 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\AbstractFOSRestController;
use FOS\RestBundle\View\View;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class APIController extends AbstractFOSRestController
{
    /**
     * 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.

Références