Bundle pour un API REST avec Symfony

API REST – Présentation des bundles

Afin de mettre en place un API REST dans votre application Symfony, plusieurs bundles peuvent être configurés afin de faciliter votre travail de développement. La recette proposée utilise les bundles suivants :

friendsofsymfony/rest-bundle

Le rest-bundle offre plusieurs outils afin de faciliter la création de votre API REST.

https://github.com/FriendsOfSymfony/FOSRestBundle

jms/serializer-bundle

Le bundle serializer-bundle permet au développeur la sérialisation d’objets. Il facilite la conversion d’une entité Doctrine vers un objet JSON ou XML. Ce bundle, relativement complet, permet de définir plusieurs règles de sérialisation. Il est donc possible d’identifier les attributs des objets qui doivent être sérialisés et envoyés aux clients et ceux qui doivent être protégés.

https://packagist.org/packages/jms/serializer-bundle

lexik/jwt-authentication-bundle

jwt-authentication-bundle offre la possibilité d’utiliser les JSON Web Tokens afin de protéger les ressources de votre API REST. Lorsque l’utilisateur s’authentifie correctement, un token lui sera retourné. Ce token sera ensuite transmis au serveur afin de permettre à l’utilisateur de lire ou d’écrire les ressources protégées.

https://github.com/lexik/LexikJWTAuthenticationBundle

nelmio/cors-bundle

Le cors-bundle permet de définir les règles CORS. Ce bundle permet de définir les domaines qui auront accès à votre API REST.

https://github.com/nelmio/NelmioCorsBundle

nelmio/api-doc-bundle

Finalement, le api-doc-bundle facilite la création d’une documentation pour votre API REST. Avec quelques annotations utiles, le bundle est en mesure de récupérer les routes de vos ressources, d’identifier les entrées et les sorties afin de générer une belle documentation HTML à la Swagger.

https://github.com/nelmio/NelmioApiDocBundle

Installation des bundles utiles pour votre API REST

ficheir configuration yaml pour Symfony

La prochaine étape consiste à installer ces bundles dans votre application Symfony 2 ou Symfony 3. L’outil Composer permettra de télécharger facilement les dépendances.

Note

L’interpréteur de commande Bash permet de chaîner des opérations avec l’opérateur &&. Cela est bien utile sur GNU-Linux ou Mac OS.


Configuration des bundles utiles pour votre API REST

Bien entendu, ces bundles doivent être configurés. Il faudra donc lire la documentation pour chaque bundle afin d’appliquer les modifications requises à votre fichier app/config/config.yml.

Voici quelques extraits de configuration :

 

FOS rest-bundle

Ici, il est possible de spécifier les formats supportés (JSON ou/et XML), la route de l’API REST ainsi que plusieurs autres options.

 

JMS Serializer

La configuration doit spécifier le dossier des méta-data.

Lexik JWT Authentication

Pour le bundle JWT Authentication, il faut spécifier le chemin des clés privé et public, le mot de passe pour ces clés et la durée de vie du jeton JWT produit.

 

Nelmio CORS

Pour Nelmio CORS, il est possible de spécifier les méthodes supportées par l’API REST ainsi que les domaines d’origines. Dans cet exemple, tous les domaines peuvent accéder à l’API REST.

 

Nelmio API Doc

Pour le bundle API Doc, il est possible de spécifier le nom de la documentation et d’activer l’antémémoire.

Mise à jour du fichier AppKernel.php

Une fois les dépendances téléchargées, il faut demander à Symfony de les exécutés. Le fichier AppKernel.php contient la liste de tous les bundles à charger dans votre application. Certains bundles sont utiles pour la production et d’autres pour le développement.

Voici un exemple de fichier AppKernel.php :

Facebook Comments

4 réponses
  1. Thom
    Thom dit :

    Salut, J’ai créé une api qui fonctionne sans problème. J’ai décidé d’utiliser pour la premiere fois NelmioCorsBundle sur un projet Symfony 3 et rien ne semble être pris en compte puisque les call XHR retourne toujours l’erreur classique comme si rien n’était configuré. Est ce que quelqu’un a deja utilisé ce bundle avec SF3 ?

    Répondre
    • Guillaume Simard
      Guillaume Simard dit :

      Bonjour et merci de participer au forum! J’utilise actuellement NelmioCorsBundle.
      Est-ce possible de fournir le message d’erreur?
      La configuration de base est présentée dans l’article.
      En configurant l’attribut « paths », il est possible de définir quelles routes seront prises en charge par NelmioCorsBundle. Dans l’exemple les routes débutent par /api/
      Il peut-être utile de vider la cache pour l’environnement dev: $ php bin/console cache:clear –env=dev


      nelmio_cors:
      paths:
      '^/api/':
      allow_origin: ['*']
      allow_headers: ['*']
      allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
      max_age: 3600

      Répondre
  2. Waly
    Waly dit :

    Bonjour j’ai lu toutes les lignes de ce tuto et je pense que mon problème n’est pas répertorié…
    Je suis à la recherche d’un bundle compatible avec symfony 3 qui permet d’attaquer une API REST externe (que j’ai développé en python et Django qui contient mes données)

    Répondre

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.