• 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 29/07/2019

Le rôle de Symfony

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

Nous l'avons vu au chapitre précédent, l'architecture REST se repose sur le protocole HTTP. Avant même de chercher à développer quoi que ce soit, il est important de voir ce que Symfony nous offre de ce point de vue-là : en effet, Symfony est un framework dit HTTP. Génial ! ^^ C'est justement ce dont nous avons besoin pour le fondement de nos APIs REST !

Même si nous allons utiliser Symfony full stack, nous allons, pour commencer, ne parler que de deux composants fondamentaux sur lesquels tous nos développements vont se reposer. Ces deux composants sont : HTTPFoundation et HTTPKernel.

Représentation de la requête et de la réponse HTTP : le composant HttpFoundation

Requête HTTP

Symfony nous offre une représentation objet de la requête HTTP. Il s'agit de la classe Symfony\Component\HttpFoundation\Request . Ainsi, bien que la requête HTTP ne soit que du texte, nous n'aurons jamais à la manipuler directement. Nous pouvons nous appuyer sur l'objetrequestqu'il est possible de récupérer très simplement. Le premier endroit auquel nous pourrions penser est la méthode de controller, autrement appelée plus communément action. Pour la recevoir, c'est très simple, il suffit de typehinter l'un des paramètres de la méthode avec le type  Symfony\Component\HttpFoundation\Request  et hop !

<?php

namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;

class DefaultController
{
    public function myAction(Request $request)
    {
        // Nous avons accès à la requête courante dans la variable $request.
    }
}
 

Réponse HTTP

Tout comme pour la requête HTTP, Symfony nous offre une représentation objet pour la réponse HTTP ! C'est pas beau ça ? :soleil: La classe en charge de l'abstraction d'une réponse HTTP est la suivante :  Symfony\Component\HttpFoundation\Response .

Notre but en soi est de toujours renvoyer une réponse, sans quoi, Symfony nous le fera remarquer avec une exception. Dans une action, vous avez différentes manières de rendre une réponse. Revoyons-les ensemble.

1. Instancier la classeResponsenous-mêmes
<?php

namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    public function myAction()
    {
        return new Response('Le contenu de ma réponse');
    }
}

Il existe d'autres classes dérivant de la classe  Response qu'il est possible d'utiliser :

  • Symfony\Component\HttpFoundation\BinaryFileResponse

  • Symfony\Component\HttpFoundation\JsonResponse

  • Symfony\Component\HttpFoundation\StreamedResponse

Allez jeter un coup d'œil à ces classes qui pourraient sans doute faire gagner un peu de temps. ;)

2. Utiliser la méthoderender()du controller provenant du FrameworkBundle
<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function myAction()
    {
        return $this->render('default/myTemplate.html.twig');
    }
}
3. Utiliser l'annotation spéciale@Template
<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController
{
    /**
     * @Template("default/myTemplace.html.twig")
     */
    public function myAction()
    {
        return array();
    }
}

Nous en avons fini avec les abstractions des requêtes et réponses HTTP. Voyons maintenant quel est le cycle de vie depuis la requête jusque la réponse. 

De la requête à la réponse HTTP : le composant HttpKernel

Le second composant que je vous invite à (re)découvrir est HttpKernel. Ce dernier est en charge de tout ce qu'il faut faire pour qu'au final nous ayons une belle réponse à envoyer à nos clients.

Cycle de vie de la requête jusque la réponse dans Symfony
Cycle de vie de la requête jusque la réponse dans Symfony

L'ensemble du cycle de vie est expliqué en détail dans la documentation officielle de Symfony : The HttpKernel Component. Le but ici n'est pas de réexpliquer cela, mais plutôt de faire un focus sur les évènements lancés par Symfony, afin de voir ce qu'il est possible de faire avec la requête et la réponse.

Les évènements sur lesquels vous pouvez vous appuyer pour travailler avec la request et la réponse sont recensés ici : Les évènements Symfony… et les nôtres.

 Il vous est donc possible à tout moment de créer un event listener (ou event subscriber, selon votre goût ^^) pour récupérer, modifier la request et/ou créer une réponse. Les possibilités sont infinies.

 Nous en avons fini avec la théorie ! Il ne nous reste plus qu'à voir les outils indispensables à un bon développeur d'API ! :zorro:

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