En esta sección, vamos a continuar con la creación de una API RESTful usando Symfony. Para ello, instalaremos el resto de las dependencias necesarias con Composer, generaremos nuestra entidad, y completaremos un CRUD utilizando varios componentes de Symfony.
Primero, instalaremos las dependencias necesarias:
Este comando instala NelmioApiDocBundle, un bundle que facilita la creación de documentación legible y eficiente para nuestra API, y permite probar los servicios directamente desde la interfaz generada.
Una vez instalado el bundle, el siguiente paso es cargar sus rutas. Para hacerlo, editamos el archivo routing.yml
ubicado en app/config
:
Esto genera una página accesible en /api/doc
, donde se mostrará la documentación de la API.
Las especificaciones de las rutas se definen mediante anotaciones en los controladores. Aquí un ejemplo de cómo documentar una acción:
El siguiente componente es JMSSerializerBundle, que amplía la funcionalidad del serializador de Symfony, permitiendo, por ejemplo, ocultar ciertos campos de un objeto al momento de serializarlo. Este bundle también es utilizado por FOSRestBundle para adaptar la respuesta según el formato solicitado por la API (JSON o XML).
Para generar nuestra entidad, utilizamos el siguiente comando de Doctrine:
Esto genera una clase Task con un campo content
de tipo texto y un campo created_at
de tipo datetime
. Posteriormente, configuramos la serialización con JMSSerializerBundle, asegurando que los campos sean requeridos y que created_at
tenga un valor por defecto:
Además, utilizamos las clases ExclusionPolicy
, Exclude
y Assert
para controlar cómo se serializan los campos y para agregar validaciones.
Para crear el formulario de la clase Task, usamos el siguiente comando:
En el formulario generado, eliminamos el campo created_at
y deshabilitamos la protección CSRF para evitar problemas con nuestra API RESTful:
Y configuramos las opciones del formulario:
Ahora, configuramos las rutas en Symfony. Primero, modificamos routing.yml
para indicar que nuestro controlador es de tipo REST:
Luego, definimos las rutas en el controlador, importando las clases necesarias y extendiendo de FOSRestController:
Ahora, vamos a crear las acciones para manejar las operaciones CRUD:
processForm
El método processForm
es crucial, ya que maneja la validación y persistencia de los datos:
Con esto, hemos completado la creación de una API RESTful utilizando Symfony, FOSRestBundle, NelmioApiDocBundle, JMSSerializerBundle y otros componentes importantes para manejar las rutas, la serialización de datos, la validación de formularios, y la documentación de la API.