Hoy vamos a ver como instalar y configurar FOSRestBundle en Symfony3 para hacer APIs RESTful de forma más optima. Con este bundle tendremos controladores tipo rest en los cuales indicarles el método HTTP que van a utilizar y generación de rutas automáticas.
Instalamos el bundle FOSRestBundle:
composer require friendsofsymfony/rest-bundle
Este comando lo que hace es añadir este paquete y sus dependencias al composer.json e instalarlo todo.
Instanciamos el objeto del bundle en el fichero app/AppKernel.php:
new FOS\RestBundle\FOSRestBundle(),
Creamos este objeto como un nuevo elemento en el array $bundles.
Abrimos el fichero de configuración app/config/config.yml y en el apartado de framework añadimos:
serializer: enabled: true
Para activar la serialización.
Ahora creamos el fichero de rutas para el bundle, de momento vacío, lo ponemos hacer con la consola:
mkdir -p src/AppBundle/Resources/config touch src/AppBundle/Resources/config/api-rest-routing.yml
En el fichero de rutas principal app/config/routing.yml añadimos la configuración de rutas del bundle:
app_bundle_api: type: rest prefix: /api resource: "@AppBundle/Resources/config/api-rest-routing.yml"
Ahora vamos a hacer que automaticamente el devolver un valor desde una acción se serialize a JSON de forma automaticamente, para eso añadimos esto:
fos_rest: view: view_response_listener: 'force' formats: json: true format_listener: rules: - { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true } - { path: ^/, priorities: [ html ], fallback_format: html, prefer_extension: true }
Al fichero app/config/routing.yml
Creamos el controlador Users que será un controlador rest en el cual en cada acción indicamos que método HTTP va a utilizar:
<?php namespace AppBundle\Controller; class UsersController { /* le indicamos el método http, el nombre de la acción y action para decirle que esto es una acción del controlador */ public function getUsersAction() { $data = array("Usuarios" => array( array( "nombre" => "Víctor", "Apellido" => "Robles" ), array( "nombre" => "Antonio", "Apellido" => "Martinez" ))); return $data; } }
Añadimos la configuración de las rutas del bundle:
api_users: type: rest resource: "@AppBundle/Controller/UsersController.php" name_prefix: api_users_
Ahora si accedemos a http://localhost/symfony/web/api/users nos devuelve el json:
{"Usuarios":[{"nombre":"V\u00edctor","Apellido":"Robles"},{"nombre":"Antonio","Apellido":"Martinez"}]}
Más información:
https://github.com/FriendsOfSymfony/FOSRestBundle