Instalar y configurar FOSRestBundle en Symfony3 (API REST)

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

Victor

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post

1 Comentario

  1. Como le añadirías a este ejemplo un basic authentication?

    Responder

Poner un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *