Symfony es una herramienta que utilizamos en muchos de nuestros proyectos, especialmente en soluciones como API REST. Symfony nos permite pulir cada detalle de los requisitos de nuestros clientes, con características cómo la seguridad, autentificación, documentación, escalabilidad, rendimiento y hasta la orquestración de microservicios. Es por ello que repasaremos los primeros pasos para desarrollar un API REST con el nuevo Symfony 5.

En el artículo de hoy, repasaras cómo instalar un nuevo proyecto con Symfony 5 y cómo hacer un simple CRUD en una arquitectura basada en REST.

Artículos Symfony 5 recomendados antes de seguir la lectura:

Artículos API recomendados antes de seguir la lectura:

Iniciando un nuevo proyecto con Symfony 5

¡Manos a la obra! Antes de empezar necesitaras un entorno PHP 7.4 y MySQL, junto a la última estructura de Symfony 5.0:

      https://symfony.com/download

Empieza creando tu proyecto web con Symfony 5:

Creando un proyecto web con Symfony 5

Para verificar que todo salió correctamente durante la descarga y creación, inicia el servidor web que incluye el propio framework ejecutando:

Iniciando el servicio web de Symfony 5

Podras acceder al enlace que te proporciona el servidor web. Si todo funciono correctamente, accederás a una página de inicio de Symfony como esta:

Web de bienvenida de Symfony 5

ORM y entidades en Symfony 5

ORM (Object-Relational mapping) te permite conectar Symfony 5 a tu modelo de base datos, además de generar las entidades (Entity) en tu proyecto API REST con Symfony 5. Es por ello que para generar las entidades, necesitaremos añadir el siguiente componente Symfony ORM:

Instalando el componente ORM en Symfony 5 para acceder a la base de datos

También añadiremos otro componente Symfony annotations, para poder acceder mediante URL a las funciones que generemos en nuestro controlador API REST:

Instalando el componente annotations en Symfony 5 para acceder a las URLs definidas en el Controlador "@Route"

Ahora que tienes el entorno preparado, es necesario modificar el parámetro DATABASE_URL del archivo “.env” que encontraras en la raíz del proyecto. Ejemplo de configuración para un entorno MySQL 5.7:

Ejemplo de configuración de MySQL 5.7 con Symfony 5

Ahora todo está preparado para ejecutar y generar las entidades (Entity) y el repositorio (Repository) en tu proyecto API REST con Symfony 5:

Comando Symfony 5 para generar una nueva entidad (Entity) y repositorio (Repository)

Como ejemplo de nuestra API REST, generaremos un sistema de registro de mascotas.  Empezaremos con la entidad “pet” con las siguientes propiedades:

  • name - string
  • type - string
  • photoUrls - JSON

Una vez finalizado, podrás verificar que se han generado dos nuevos archivos dentro de la carpeta src/. El archivo Pet.php en la carpeta Entity y PetRepository.php en la carpeta Repository.

Ahora que ya tenemos nuestra clase PHP “mascota”, habrá que generar el modelo de base de datos según los requisitos que marca la Entity. Para generar la estructura, ejecuta los siguientes comandos con los que generaras el modelo de base de datos en tu tabla:

Comando Symfony 5 para generar el modelo de base de datos según la entidad (Entity)

Después de ejecutar la migración, tu base de datos debería verse así:

Resultado SQL de la generación del modelo de base datos con Symfony 5

Si alguna vez necesitas extender cualquier entidad que ya este generada, no te preocupes. Siempre que realices un cambio en una entidad (Entity), simplemente vuelve a ejecutar los dos comandos sobre la imagen para actualizar tu modelo de base de datos.

API REST con Symfony 5

Para poder interactuar con la entidad “mascota”, generaremos un modelo CRUD  (Create, Read, Update y Delete).  Las cuatro funcionalidades básicas de una API. Cada una de estas funcionalidades está representada por un método HTTP:

  • POST - Crear (insertar datos)
  • GET - Leer (recuperar datos)
  • PUT / PATCH - Actualizar (modificar datos)
  • DELETE - Eliminar (eliminar datos)

Revisemos cada uno de ellos:

Crear (insertar datos) - POST API REST

Empezaremos creando una clase PetController.php en la carpeta src/Controller con una función llamada addPet, que nos permitirá crear nuevas mascotas insertando los datos en la base de datos:

Tenemos un constructor donde accedemos a la clase PetRepository, con la que vamos a actualizar con una función “savePet” para guardar los datos en la base de datos.

Puedes añadir la función “savePet” al  src/Repository/PetRepository.php, modificando el código tal como:

Ya podemos guardar, el controlador con la función “add” pasara las a la función “savePet” del repositorio, para guardar las variables en tu base de datos.

Para probar que todo funciona correctamente, puedes usar algún Client REST como Postman o Insomnia:

Método HTTP POST en una API REST con Symfony 5

¡Ya tenemos el Create de nuestra entidad Pet!

Leer (recuperar datos) - GET API REST

Para poder leer y recuperar los datos de nuestras mascotas, realizaremos una función en PetController.php que recuperará los datos de una mascota "Pet" de la base de datos proporcionando un número de ID en URL:

Puedes probar la solicitud GET con la URL (/pet/6), donde 6 es el id de la base de datos :

Método HTTP GET en una API REST con Symfony 5

Si lo que necesitamos es recupere todos los registros de nuestras mascotas "Pet", para ello puedes generar una función como:

El resultado es el siguiente:

Método HTTP GET en una API REST con Symfony 5

Actualizar (modificar datos) - PUT API REST

Para actualizar los datos, generamos la función updatePet en PetController.php, que recibe el ID de Pet para actualizar, junto con los nuevos datos para modificar. Antes de pasar las variables a la función updatePet, debemos verificar si están vacías. La función se ve así:

PetRepository también necesita una nueva actualización, la función updatePet:

El resultado del PUT es el siguiente:

Método HTTP PUT en una API REST con Symfony 5

Eliminar (eliminar datos) - DELETE API REST

Para acabar con el modelo CRUD, añadiremos a nuestro controlador PetController.php la opción de eliminar un registro de la base de datos:

Ahora, al igual que actualizar, debemos añadir una nueva función removePet en PetRepository.php:

El resultado del DELETE es el siguiente:

Método HTTP DELETE en una API REST con Symfony 5

Conclusión

En el post de hoy hemos repasado los primeros pasos para generar una API REST con Symfony 5. Puedes acceder al repositorio de pruebas desde nuestra cuenta GitHub.

Este post es solo una primera toma de contacto con la nueva versión del framework. Próximamente continuaremos comentando funcionalidades y características de Symfony 5 como los Services, métodos de autentificación API, documentación API, entre muchos otros.

¿Qué te parecen estos primeros pasos API REST con Symfony 5? Si necesitas ayuda desarrollando un sistema API REST y en PHP Symfony 5, ¡no dudes en contactarnos!

Photo by Lindsay Henwood on Unsplash

Referencias:
Symfony 5 — The REST, the CRUD and the Swag