• 8 hours
  • Hard

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/27/23

Interrogez une API externe

Interrogez une API externe

Jusqu’à présent, nous nous sommes concentrés sur le fait de créer une API qui sera lue par un client, cependant Symfony est également capable de communiquer avec une API

Dans ce chapitre, nous allons voir comment créer une nouvelle route qui va interroger une API externe et nous retourner la réponse de cette API.

Appelez une API externe

Pour l’exemple, nous allons appeler cette route :

https://api.github.com/repos/symfony/symfony-docs  .

Il s’agit en fait de la documentation de Symfony, en JSON. Si nous appelons cette URL depuis Postman, nous obtenons ceci :

Le Body de Postman nous affiche les données obtenues de la documentation Symfony par la requête GET.
Le résultat de la requête GET de la documentation Symfony

L’idée pour nous va être de créer une nouvelle route. Dans le constructeur de cette route, nous allons faire l’appel à cette URL, récupérer les données et les retourner.

Créez le nouveau contrôleur

Nous allons créer un moyen d'interroger une API externe.

Autrement dit, notre future méthode du contrôleur sera un client HTTP qui va interroger une API. Nous allons donc installer le client HTTP fourni par Symfony. :)

composer require symfony/http-client

Ensuite, nous pouvons créer le contrôleur lui-même, ExternalApiController , avec la commande :

php bin/console make:controller
Nous renseignons la commande dans le terminal, puis le nom du contrôleur pour le créer.
Nous créons le contrôleur ExternalApicontroller

Supprimons le dossier external_api  qui a été généré, et nous pouvons mettre à jour notre contrôleur :

<?php
    // src\Controller\ExternalApiController.php
 
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\HttpClient\HttpClientInterface;

 
class ExternalApiController extends AbstractController
{
    /**
     * Cette méthode fait appel à la route https://api.github.com/repos/symfony/symfony-docs
     * récupère les données et les transmets telles quelles.
     *
     * Pour plus d'information sur le client http:
     * https://symfony.com/doc/current/http_client.html
     *
     * @param HttpClientInterface $httpClient
     * @return JsonResponse
     */
    #[Route('/api/external/getSfDoc', name: 'external_api', methods: 'GET')]
            public function getSymfonyDoc(HttpClientInterface $httpClient): JsonResponse
    {
        $response = $httpClient->request(
            'GET',
            'https://api.github.com/repos/symfony/symfony-docs'
        );
        return new JsonResponse($response->getContent(), $response->getStatusCode(), [], true);
    }
}

Le code ici est extrêmement simple :

  • nous appelons l’URL, en GET grâce au httpClient fourni par Symfony ; 

  • et nous transmettons directement le contenu de la réponse. 

Il ne reste plus qu’à tester cet appel, sans oublier de préciser le champ Authorization dans le header, avec le bearer et notre fameux token JWT.  

On appelle l’URL avec nos bearer et token JWT renseignés dans le champ Authorization… et nous obtenons un statut 200 OK ainsi que les données transmises.
Test avec Postman : nous obtenons un statut 200 OK

Et voilà, tout fonctionne !

Ce système est très pratique pour embarquer des données que vous n’aurez pas à gérer vous-même.

Par exemple, si vous gérez un site pour des logements de vacances, être capable de retourner la météo en même temps qu’une liste de logements sur une région donnée pourrait être un plus pour convaincre des touristes potentiels !

Les possibilités sont vastes, faites juste attention à ce que votre application ne devienne pas complètement dépendante de cette API tierce !

En résumé

  • Votre API peut également jouer le rôle d’un client HTTP.

  • Attention, quand un contrôleur est créé, la méthode créée automatiquement par Symfony dans ce contrôleur avec make n’est pas la même selon que Twig est installé ou pas. 

  • Il faut faire attention à ne pas être trop dépendant d’une API externe : si elle ne fonctionne plus, votre application doit quand même répondre (au pire en disant que les données sont indisponibles).

Dans le chapitre suivant, nous allons voir API Platform, qui est un outil “tout-en-un” qui va reprendre l’ensemble des principes que nous avons vus jusqu’à présent, et nous permettre de générer une API quasi automatiquement en quelques opérations à peine.

Example of certificate of achievement
Example of certificate of achievement