En esta serie de publicaciones de blogs, estaremos siguiendo los pasos para construir una sencilla app de tareas, utilizando AngularJS y Symfony 2. En estas dos primeras partes ahondaremos la construcción de una API REST con Symfony 2.
Para este tutorial vamos a suponer que usted está ejecutando un ambiente *Nix (Mac OS X, Linux), y tener al menos PHP, MySQL y Composser instalados. Ademas de tener buenos conocimientos en PHP.
Como se puede imaginar, nuestra primera tarea es instalar nuestro entorno de desarrollo, y para ello vamos a instalar Symfony utilizando su programa de instalación de línea de comandos. Para ello vamos a tener que descargar el instalador para nuestra máquina, si ya tiene el programa de instalación de línea de comandos se puede omitir el siguiente paso:
$ sudo curl -LsS http://symfony.com/installer -o /usr/local/bin/symfony
$ sudo chmod a+x /usr/local/bin/symfony
Después de tener el instalador en nuestra máquina, tendrá que navegar hasta la carpeta que contiene su código API REST, para este tutorial voy a estar trabajando con dos carpetas, así que voy a tener la siguiente distribución:
Así que en este caso voy a tener que navegar hasta la carpeta ToDoExample y ejecutar el siguiente comando:
$ symfony new backend
Esto creará la carpeta backend y copiara los archivos de Symfony requeridos. Tendremos una instalación básica de Symfony ya lista para desarrollar, si está ejecutando PHP5.4 +, fácilmente se podría probar nuestra instalación de Symfony mediante la ejecución en la consola:
$ cd backend
$ php app/console server:run
Si se desplaza a la url proporcionada en la salida de ese comando (http://127.0.0.1:8000), va a obtener un error 404 del framework Symfony, esto no es malo, esto significa que ya ha consultado a la salida de su instalación básica de Symfony.
Ahora tenemos que instalar los Bundles que vamos a utilizar para construir nuestra API REST: FosRestBundle, JMSSerializerBundle, NelmioCorsBundle, para llevar a cabo esta tarea, tendrá que ejecutar los siguientes comandos en la consola:
$ composer require friendsofsymfony/rest-bundle
$ composer require jms/serializer-bundle
$ composer require nelmio/cors-bundle
Una vez hecho esto, ahora tenemos que decirle a Symfony para cargar nuestros paquetes recién instalados, esto se hace mediante el registro en nuestro núcleo, ahora van a app / AppKernel.php y en la matriz de paquetes, añadir nuestros paquetes:
public function registerBundles()
{
$bundles = array(
…
new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new Nelmio\CorsBundle\NelmioCorsBundle(),
...
);
...
}
Ahora tenemos que configurar nuestros paquetes, el primer paquete tendremos que configurar es NelmioCorsBundle, en su aplicación / config.yml copiar las siguientes líneas al final:
nelmio_cors:
defaults:
allow_credentials: false
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
max_age: 3600
hosts: []
origin_regex: false
Ahora vamos a tener que configurar el FosRestbundle, en el mismo archivo (app / config.yml) escribir estas líneas:
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener: true
view:
view_response_listener: 'force'
formats:
xml: true
json : true
templating_formats:
html: true
force_redirects:
html: true
failed_validation: HTTP_BAD_REQUEST
default_engine: twig
routing_loader:
default_format: json
Para el JMSSerializerBundle se crearán las configuraciones cuando creamos nuestro modelo en la siguiente parte de nuestro tutorial.
El siguiente paso es crear nuestro paquete REST, vamos a utilizar una herramienta de línea de comandos en la consola de Symfony, abra el terminal y escriba:
$ php app/console generate:bundle
Y siga el asistente, puede utilizar los siguientes valores para configurar el paquete:
Ahora tenemos nuestro paquete básico, pero todavía estamos muy lejos de tener una API REST funcional, ahora vamos a explicar un poco de lo que cada uno de estos paquetes que instalamos va a hacer por nosotros:
Es la base de nuestra API REST, que se encargará de los procesos repetitivos en cada REST Call, que son verificar la solicitud, y que el punto final admita el verbo correcto, llame a nuestra acción, y serializar los datos en el formato deseado, que maneja varios métodos de serialización, pero los dos principales son JSON y XML.
Este es el paquete que se encarga de la serialización real de nuestros objetos, matrices y valores. Lo que se trata es de resolver el problema de tener que hablar el "lenguaje" correcto de nuestro visitante, responderemos en nuestro "lenguaje" y este paquete se traducirá en el "lenguaje" que pide al usuario.
Si ha hecho algo de ajax en la web, usted sabe que no se puede realizar una llamada desde un dominio a otro, el mismo principio se aplica para las llamadas de API REST en AngularJS, por lo que CORS son algunas cabeceras que ayudara a nuestro servidor a permitir un dominio diferente para llamar a nuestra API.
En el siguiente tutorial vamos a crear nuestro modelo y la implementación de un CRUD con el descanso, con el fin de consumirlo con un extremo frontal AngularJS. Mientras tanto, puede seguir practicando sus habilidades de Symfony, mientras que publiquemos la parte 2 de estos blogs.