• 50 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 27/02/2019

Premiers pas avec le FOSRestBundle

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

Il est temps de penser notre API plus globalement ! Jusque là, nous avions notre début de CRUD avec les fonctionnalités suivantes :

  • obtenir les informations d'un article ;

  • créer un article ;

  • obtenir la liste des articles avec leurs informations.

Nous avons pu voir qu'il est tout à fait possible de construire une API très simple sans librairie, à condition d'avoir en tête l'ensemble des contraintes liées à REST. Pas évident lorsqu'il faut se concentrer également sur les besoins client qui peuvent être très compliqués.

Dans cette deuxième partie de cours, il s'agit de nous faciliter la vie concernant beaucoup de problématiques courantes sans avoir à réinventer la roue à chaque fois.

Qu'est-ce que FOSRestBundle ?

Il s'agit d'un bundle vous permettant de répondre à des problèmes courants durant le développement d'API REST. Parmi les problématiques que l'on peut rencontrer, en voici quelques-unes que le bundle résout :

  • Désérialiser le contenu de la requête automatiquement (de JSON -ou XML- vers objet)

  • Gérer la négociation de contenu

    • il s'agit de lire les entêtes (headers) d'une requête pour en déterminer la réponse adéquate ; nous en parlerons plus en détail lors du prochain chapitre.

  • Désactive la protection CSRF pour les formulaires

    • c'est très pratique dans la mesure où ce genre de vérification doit se faire côté client (rappelez-vous, pas de session côté serveur !).

  • Fournir un certain nombre d'annotations pour nos controllers pour nous faciliter la vie

  • Faciliter l'intégration du bundle JMSSerializerBundle pour la sérialisation

    • vous pouvez donc bénéficier de toutes les fonctionnalités de JMSSerializer que nous avons vues dans la partie précédente.

N'est-ce pas magnifique ? :D

Installation

 Pour l'installer avec Composer, positionnez-vous dans le dossier de votre projet, et tapez la ligne de commande suivante :

$ composer require friendsofsymfony/rest-bundle
Installation du FOSRestBundle
Installation du FOSRestBundle

  Il ne nous suffit plus qu'à déclarer le bundle dans la classeAppKernel:

<?php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            // …
            new FOS\RestBundle\FOSRestBundle(),
        ];

        //…

        return $bundles;
    }

    //…
}

Il nous faut maintenant écrire un peu de configuration de base pour pouvoir commencer à utiliser le bundle dans les meilleures conditions.

Configuration

Configuration de base

Commençons par ouvrir le fichier  app/config/config.yml. Toute la configuration propre au FOSRestBundle doit être écrite sous la clé  fos_rest. Je vous invite à récupérer les lignes de code suivantes, nous les décortiquerons ensuite :

#app/config/config.yml

fos_rest:
    body_converter:
        enabled: true
    view:
        formats: { json: true, xml: false, rss: false }
    serializer:
        serialize_null: true

Qu'est-ce que c'est que tout ça ?

Pas de panique ! Alors, alors, voyons clé par clé de quoi il retourne :

  •  fos_rest.body_converter.enabled : ici nous activons la désérialisation automatique du contenu de la requête. Concrètement, nous serons donc en mesure de recevoir un objet déjà désérialisé en paramètre d'une action, à condition d'ajouter une annotation particulière que nous verrons plus tard ;

  •  fos_rest.view.formats : nous indiquons ici les formats que nous souhaitons pouvoir gérer pour la sérialisation. Pour ce cours, nous n'utiliserons que le format JSON ;

  •  fos_rest.serializer.serialize_null : par défaut, lorsqu'un champ est  null  dans un objet, lors de la sérialisation, il n'est pas considéré. En conséquence, Il est donc complètement ignoré. Nous ne souhaitons pas que ce soit le cas, nous ajoutons donc cette configuration.

Configuration du serializer

Il nous faut également indiquer quel type de serializer vous souhaitez utiliser.

    Option 1 : Utiliser le composant Serializer de Symfony

Dans le cas où vous souhaitez utiliser le composant Serializer de Symfony, il faut indiquer la configuration suivante :

# app/config/config.yml
framework:
    # ...
    serializer:
        enabled: true
    Option 2 : Utiliser le JMSSerializerBundle

Dans le cas où vous souhaitez utiliser le bundle JMSSerializerBundle, il vous suffit d'installer le bundle et le déclarer dans la classe AppKernel. Le bundle déclare un alias sur le service serializer de manière à ce que ce soit le service  jms_serializer qui soit appelé.

   Option 3 : Utiliser un tout autre serializer

Il vous suffit d'indiquer quel service vous souhaitez utiliser dans la configuration du bundle FOSRestBundle :

# app/config/config.yml

fos_rest:
    service:
        serializer: your_serializer.service

Affichez toute la configuration du FOSRestBundle

Vous pouvez retrouver toute la configuration du bundle en tapant la commande suivante dans la ligne de commande : 

$ bin/console config:dump-reference fos_rest

Nous aurons l'occasion de rencontrer d'autres éléments de configuration au cours de cette partie du cours.

 

Rendez-vous au prochain chapitre pour créer notre premier point d'entrée de notre API de gestion d'articles.

Exemple de certificat de réussite
Exemple de certificat de réussite