Guía definitiva para crear APIs con Symfony 5 y API Platform
Creación de una API con Symfony y API Platform. Estructura de servicios, RabbitMQ, Docker y mucho más!
Description
En este curso aprenderás no solo a crear una API con Symfony 5 y API Platform usando PHP 7.4, sino que aprenderás a explotar las herramientas disponibles para desarrollar tus aplicaciones tales como: Docker, PHPStorm, Xebug RabbitMQ y muchas más.
El proyecto estará estructurado en 3 servicios:
- Una API para gestionar movimientos de contabilidad
- Un servicio de RabbitMQ para procesar mensajes
- Un servicio de mailing que leerá mensajes de RabbitMQ y enviará emails a los usuarios
Aprenderás a leer código de librerías de terceros y a crear patrones de diseño y arquitecturas escalables y fáciles de mantener.
También aprenderás a cubir todos los casos de uso de tus aplicaciones tanto con tests funcionales como unitarios.
Al terminar este curso, serás capaz de crear APIs robustas que te ayudarán a conseguir más logros en tu carrera profesional :)
Tabla de contenidos
Introducción al curso
Requisitos básicos para este curso
Requisitos del sistema
Configurando WSL 2 en Windows 10
Entorno de Docker
Archivos y carpetas para el entorno
Configuración de Nginx
Configuración de PHP
Configuración de Docker Compose
Makefile
Archivos y carpetas para RabbitMQ
Configurar entorno de docker para RabbitMQ
Repositorio Remoto
Enlace al repositorio con el código del curso por secciones
Creación de proyecto Symfony
Instalación de librerías adicionales
Librerías necesarias para el proyecto
Configuración básica de API Platform
Registro de usuarios
Librerías necesarias y entidad User
Mapeo de la entidad User
Creando BaseRepository
Creando UserRepository
Listener para capturar excepciones
Migración para crear tabla user
Instalar y configurar librería para generar JSON Web Tokens (JWT)
Preparando servicio y controller
Actualizando API Platform (swagger)
Creando EncoderService
Creando RequestService
Actualizando security.yaml
Completando la lógica del servicio
Servicio de Mailer
Creando estructura de archivos
Creando proyecto Symfony y cambiando namespace
Instalar dependencias necesarias
Cómo funciona RabbitMQ?
Instalar Messenger component y crear clase para el mensaje
Configurar Messenger en la API
Enviando nuestro primer mensaje a RabbitMQ
Configurar Messenger component en Mailer
Instalar MailCatcher y TwigBundle
Crear servicio, clase para rutas y plantillas
Añadir lógica a MailerService
Consumiendo nuestro primer mensaje de RabbitMQ
Acción para reenviar email de activación de cuenta
Crear estructura de archivos y actualizar API Platform
Lógica para enviar email de activación de cuenta
Acción para activar cuenta de usuario
Acción para acceder (Login)
Configurando el Firewall
UserProvider y actualización de security.yaml
Actualizar endpoint para login
Añadir o quitar información del token
Acción para restablecer contraseña
Explicación del proceso
Crear archivos necesarios y actualizar API Platform
Crear mensaje y actualizar configuración de Messenger
Añadiendo lógica al servicio y probando el envío
Creando mensaje y actualizando configuración en Mailer
Creando plantilla y actualizando servicio de Mailer
Consumiendo mensajes y comprobando errores
Acción para restablecer contraseña
Crear estructura de archivos
Añadir lógica en el servicio
Acción para cambiar la contraseña
Crear archivos y actualizar API Platform
Añadir lógica y probar el endpoint
Usando Argument Resolver para inyectar al usuario autenticado
Refactorizando controladores y desacoplándolos de los servicios
Test funcionales y unitarios de todos los endpoints creados.
Instalando dependencias y configurando el proyecto
Creando Fixtures para User
Creando base de datos de testing
Creando la clase TestBase para tests funcionales
Test para la acción de login
Test para la acción de registro
Test para la acción de pedir restablecimiento de contraseña
Test para acción de restablecer contraseña
Test para acción de reenviar email de activación
Test para acción de cambiar contraseña
Creando UserServiceTestBase para tests unitarios
Test para el servicio de activación de cuenta
Test para el servicio de registro de usuarios
Test para el servicio de solicitud de restablecimiento de contraseña
Test para el servicio de reenvío de email de activación
Test para el servicio de resetear contraseña
Test para el servicio de cambiar contraseña
Acción para subir avatar de usuario
Crear estructura de carpetas y actualizar API Platform
Optimizar Swagger e instalar dependencias necesarias
Crear Space en Digital Ocean y añadir variables en nuestra aplicación
Configurar nuestra API para subir archivos a la nube
Añadiendo lógica de servicios y probando
Test unitario para FileService
Test unitario y funcional para acción de subir avatar
OAuth (Facebook Login)
Instalando dependencias y creando App en Facebook
Actualizando configuración y usando Adapter Pattern para cliente HTTP
Crear ficheros necesarios y actualizar API Platform
Añadir lógica a los servicios
Probando y explicando el proceso entero.
Configurando endpoints para usuario
Crear voter para User
Actualizando API Platform
Tests funcionales para los endpoints
Grupos de usuarios
Crear entidad y actualizar relación con User
Mapeo de la entidad
Migración para crear la tabla user_group
Actualizando API Platform
Creando voter para Group
Extensiones de Doctrine para controlar la seguridad de subrecursos
Actualizando Fixtures y testeando endpoint para obtener grupos de usuarios
TestBase para grupo y testeando endpoint para obtener grupos
Test del endpoint para actualizar grupos
Test del endpoint para eliminar grupos
Test del endpoint para obtener usuarios de un grupo
Gestión de grupos
Crear entidad para solicitudes
Mapeo de la entidad para solicitudes
Crear migración
Crear repositorio
Crear clase para mensaje de RabbitMQ y actualizando configuración
Creando excepciones y añadiendo lógica al servicio
Actualizar API Platform y probar envío de solicitud
Crear mensaje y configuración en Mailer
Crear plantilla y actualizar MailerService
Creando Handler para procesar mensajes y probar
Creando ficheros y configuración para endpoint de aceptar solicitudes
Refactorizando BaseRepository y añadiendo lógica al servicio
Testeando la acción de aceptar solicitudes
Crear archivos para endpoint para eliminar usuarios de un grupo
Creando excepciones y añadiendo lógica al servicio
Testing de la acción para eliminar usuarios de un grupo
Categorías
Crear entidad
Crear mapeo de la entidad
Crear migración
Actualizar API Platform
Crear fichero de grupos de serialización
Actualizando extensión de Doctrine
Crear voter para Category
Introducción al sistema de eventos y listeners
Usando PreWriteListener para validar la creación de categorías
Testeando endpoints de categoría
Movimientos
Crear entidad
Crear mapeo de la entidad
Crear migración
Actualizar API Platform
Crear fichero de grupos de serialización
Actualizando extensión de Doctrine
Crear voter para Movement
Usando PreWriteListener para validar la creación de movimientos
Subir archivos de movimientos
Crear estructura de ficheros para subir archivos
Añadiendo lógica a los servicios y probando
Testing de la acción para subir archivos
Crear estructura de ficheros para descargar archivos
Añadiendo lógica para descargar archivos
Testeando acción para descargar archivos
Refactorizando los enpoints y tests
Filtros
Configurando DateFilter en User
Configurando SearchFilter en User
Configurando BooleanFilter en User
Configurando NumericFilter en Movement
Configurando RangeFilter en Movement
Creando custom SearchFilter
Creando custom BooleanFilter
Creando custom ExistsFilter
Creando custom OrderFilter
Creando custom NumericFilter y RangeFilter
Filtros en entidades anidadas
Modificando la API, trucos y consejos
Decorando la respuesta de nuestra API
Usando SQLite para acelerar tests funcionales
Modificando la respuesta de nuestros endpoints
Anidando subrecursos
What You Will Learn!
- Crear APIs con Symfony 5 y API Platform.
- Comunicación entre servicios con RabbitMQ
- Creación de entornos de desarrollo con Docker en Linux, Mac y Windows
- Aprender patrones de diseño y arquitecturas de software para desarrollar aplicaciones fáciles de mantener
- Aprender a usar Xdebug para detectar y corregir errores de forma eficiente
- Crear tests funcionales
- Crear tests unitarios
- Autenticación OAuth (Facebook login)
Who Should Attend!
- Desarrolladores Web que desean pasar al siguiente nivel conociendo y explotando las herramientas disponibles en el mercado
- Programadores que quieren saber qué es lo que pasa internamente en la aplicación para aumentar sus habilidades y conseguir mejores puestos de trabajo