Primeros pasos con Symfony 5 como API REST
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:
- Symfony 5. ¿Qué hay de nuevo en el Framework?
- Symfony 5. ¿Cómo traducir e internacionalizar el framework?
Artículos API recomendados antes de seguir la lectura:
- API Gateway de AWS. ¿Cómo crear una API REST?
- ¿Cómo documentar correctamente mi API?
- ¿Como debo mejorar la seguridad de mí API?
- ¿Cuál es el mejor método de autentificación en un API REST?
- ¿Cómo mantener mi API RESTful?
- ¿Cómo escalar mi API REST?
- API Gateway en tu arquitectura de microservicios
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:
Empieza creando tu 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:
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:
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:
También añadiremos otro componente Symfony annotations, para poder acceder mediante URL a las funciones que generemos en nuestro controlador API REST:
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:
Ahora todo está preparado para ejecutar y generar las entidades (Entity) y el repositorio (Repository) en tu proyecto API REST con Symfony 5:
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:
Después de ejecutar la migración, tu base de datos debería verse así:
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:
¡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 :
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:
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:
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:
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