PRÉSENTATION DU COURS

Renvoyer des réponses en json

Créer une api json pour transférer des données à d'autres serveurs ou applications web / mobile

Créer une réponse json

Parfois nos routes n'ont pas forcément besoin de templates, car elle ne vont pas être destinée à être utilisée par des utilisateurs mais plutôt par des scripts, des applications ou encore des serveurs.

Généralement, ces routes sont utilisés pour des choses comme des requêtes ajax.

Qu'est ce que les requêtes ajax ?

Une requête ajax, est une requête à un serveur lancée par un navigateur permettant de mettre à jour quelque chose dans la base de donnée sans recharger la page de l'utilisateur.

Pour bien comprendre ce que c'est, nous allons faire un petit exemple avec les likes d'instagram !

Tout d'abord imaginez ce que ce serait si votre application devait se recharger à chaque fois que vous mettez un like sur une photo, vraiment pas terrible.

Avec le comportement Ajax, voilà comment ça se passe :

  • Vous likez la photo
  • Une animation apparaît
  • Le navigateur envoie une requête ajax au serveur disant que cet utilisateur a aimé cette photo
  • Le serveur renvoie que cette action a bien été pris en compte
  • L'application incrémente le nombre de like
  • Pas de rechargement

Ces comportements permettent donc d'avoir des actions avec l'utilisateur de manière bien plus fluide et sans redirection.

Si vous voulez, ce sont des actions qui se passent en parallèle de ce que vous faites sur le navigateur.

Si vous avez l'occasion de faire du Javascript, vous allez y être confronté, mais dans ce cours ce n'est pas requis !

Le json c'est quoi ?

Le JSON, c'est un format de donnée permettant de représenter des objets sous forme de clef / valeur, des tableaux et autres types présent en Javascript.

Il est similaire au XML en termes de capacité, mais à l'avantage d'être bien plus lisible.

De nos jours, toutes les api utilisent principalement du json.

Pour vous familiariser avec le json, je vous conseille de lire cet article qui reprends plutot bien les concepts et différents exemples.

Comment envoyer du json ?

Pour renvoyer du json, pas besoin d'incantation vaudou ou autre, symfony intègre directement une classe JsonResponse, permettant de transformer vos structures PHP en JSON, pratique !

Voilà un petit exemple d'une route renvoyant du json :

<?php

namespace App\Controller; 

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse; // on ajoute la classe de réponse json

class ExempleController extends AbstractController
{
    /**
    * @Route("/", name="homepage") // ajout d'une propriété name
    **/
    public function index() {
        return $this->render('index.html.twig', [
            'title' => 'hello world'
        ]);
    }

    /**
    * @Route("/test", name="nothomepage")
    **/
    public function nothomepage() {
        return $this->render('index.html.twig', [
            'title' => 'This is not homepage'
        ]);
    }

    /**
    * @Route("/saymyname/{name}", name="saymyname")
    **/
    public function random($name) {
        return new Response('Hello ' . $name . ' !'); 
    }

    /**
    * @Route("/api", name="api_index")
    **/
    public function api() { // nouvelle route
        $data = [
            'test' => 'hello world',
            "table" => ['C’est pas faux', "Une fois, à une exécution, je m'approche d'une fille. Pour rigoler, je lui fais : « Vous êtes de la famille du pendu ? »... C'était sa sœur. Bonjour l'approche !", "C’est pour ça : j’lis jamais rien. C’est un vrai piège à cons c’t’histoire-là. En plus j’sais pas lire."]
        ];

        return new JsonResponse($data);
    }
}

Si vous allez sur votre site à l'addresse /api,

vous devriez avoir un JSON comme ça :

{
  "test": "hello world",
  "table": [
    "C’est pas faux",
    "Une fois, à une exécution, je m'approche d'une fille. Pour rigoler, je lui fais : « Vous êtes de la famille du pendu ? »... C'était sa sœur. Bonjour l'approche !",
    "C’est pour ça : j’lis jamais rien. C’est un vrai piège à cons c’t’histoire-là. En plus j’sais pas lire."
  ]
}

Conclusion

Vous savez désormais utiliser JsonResponse pour renvoyer des données en json à vos utilisateurs / apps / serveur, ne sous estimez pas ces routes, généralement les sites en ont beaucoup plus que ce que vous pensez !

Nous allons pouvoir appliquer ce que nous avons appris dans un petit projet vous permettant de manipuler !

Envie de discuter du contenu ?

logo twitter @GarnierKristen