Besoin d’une API sur Symfony2 utilisez les environnements

Publié le par samuel

Le but de cet article n’est pas de vous expliquer comment mettre en place un environnement sur symfony2, mais plutôt vous donnez 2 exemples d’environnements :

  • API
  • DOC

API

L’environnement API est un environnement utilisé par les applications tierces.
Spécificités :

  • Configuration – mise en place d’un sous domaine dédié : api.xxxx.fr
  • Sécurité – Utilisation du WSSE pour sécuriser les données et definition d’un rôle « ROLE_API »
  • Routing – Définition des routes de l’API

Exemple de la configuration :

config_api.yml :

imports:
    - { resource: config.yml }
    - { resource: security_api.yml }

parameters:
    router.request_context.host: api.xxxx.fr
    router.request_context.scheme: http

framework:
    router:
        resource: "%kernel.root_dir%/config/routing_api.yml"

security_api.yml :

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_API:    [ROLE_USER]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        main:
            pattern:   ^/
            stateless: true
            wsse:      true

    access_control:
        - { path: ^/, roles: ROLE_API }

routing_api.yml :

api_article:
    resource: "@AppBundle/Controller/RestController.php"
    type:     rest
    defaults:
        _format: json

DOC

L’environnement DOC est un environnement utilisé par les développeurs lors du développement d’applications tierces utilisant l’API développer.
Spécificités :

  • Configuration – mise en place d’un sous domaine dédié : doc.xxxx.fr
  • Sécurité – Utilisation d’une connexion pour sécuriser test et les informations de l’API et definition d’un rôle « ROLE_DOC »
  • Bundle – Utilisation du bundle NelmioAPIDoc
  • Routing – Inclusion des routes de l’API, de la configuration du bundle et de la connexion

Exemple de la configuration :

AppKernel.php :

public function registerBundles()
{
        if (in_array($this->getEnvironment(), array('doc'))) {
            $bundles[] = new Nelmio\ApiDocBundle\NelmioApiDocBundle();
        }
}

config_doc.yml :

imports:
    - { resource: config.yml }
    - { resource: security_doc.yml }

parameters:
    router.request_context.host: doc.xxxx.fr
    router.request_context.scheme: http

framework:
    router:
        resource: "%kernel.root_dir%/config/routing_doc.yml"

nelmio_api_doc:
    name: %sitename% API documentation

security_doc.yml :

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_DOC:   [ROLE_USER]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        main:
            pattern:            ^/
            context:            user
            form_login:
                provider:       fos_userbundle
                login_path:     fos_user_security_login
                default_target_path: nelmio_api_doc_index
                check_path:     fos_user_security_check
            logout:
                path:           fos_user_security_logout
                target:         nelmio_api_doc_index
                invalidate_session: false
            anonymous:          true

    access_control:
        - { path: ^/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/connexion/check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_DOC }

routing_doc.yml :

fos_user_security_login:
    pattern: /connexion
    defaults: { _controller: FOSUserBundle:Security:login }

fos_user_security_check:
    pattern: /connexion/check
    defaults: { _controller: FOSUserBundle:Security:check }

fos_user_security_logout:
    pattern: /deconnexion
    defaults: { _controller: FOSUserBundle:Security:logout }

nelmio_api_doc:
    resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
    prefix:   /

_api:
    resource: routing_api.yml

Pour finir, je vous conseil d’utiliser les environnements symfony2, ils permettent de cloisonner de manière efficace différente partie d’une application.

Samuel Quéniart

Cette entrée a été publiée dans Symfony 2 Utils, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.



Une réponse à Besoin d’une API sur Symfony2 utilisez les environnements

  1. Hello,

    Très bon tutoriel !

    Il existe également une alternative complète qui implémente nativement toutes ces fonctionnalités : API platform.
    API platform respecte la norme JSON-LD grâce au support d’Hydra.

Laisser un commentaire

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

*


three * 9 =

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>