Portafolio Profesional
Portafolio profesional desarrollado para centralizar experiencia, habilidades, proyectos, servicios y contenido técnico en una plataforma moderna y escalable.
|
Backend Developer | Desarrollo de APIs seguras, automatización y soluciones backend escalables | Python • PHP • NestJs • NextJs • React • MySQL • PostgreSQL • AWS • Git • Linux | Divulgando conocimiento para todos

Experiencia y Skills
Experiencia profesional, formación académica y habilidades técnicas conectadas con soluciones backend, APIs e infraestructura.
Profesional independiente · Híbrido
jul 2024 - actualidad · 2 años
Villahermosa, Tabasco, México
Desde 2024 he trabajado de manera independiente desarrollando solucion...
sep 2018 - actualidad · 7 años 10 meses
Villahermosa, Tabasco, México
Desde 2018, brindo servicios tecnológicos y soporte técnico especializ...
1/5
Skills
1/5
Sobre mí
Backend, APIs, automatización e infraestructura pensada para resolver problemas reales.
Backend Developer enfocado en el desarrollo de APIs seguras, automatización de procesos y soluciones escalables. Me apasiona construir sistemas eficientes, desde la lógica del servidor y la arquitectura backend hasta la integración con bases de datos y servicios en la nube.
He participado en proyectos académicos y tecnológicos relacionados con plataformas digitales, marketplaces y soluciones orientadas a innovación y tecnología. Además, disfruto compartir contenido técnico sobre backend, bases de datos, APIs y arquitectura de software. Actualmente continúo fortaleciendo mis conocimientos y desarrollando soluciones modernas y escalables.
Cliente
API
Backend
DB
Cloud
Paso 1
Una persona entra a tu sitio, inicia sesión o realiza una acción.
Servicios
Servicios enfocados en backend, APIs, bases de datos, infraestructura cloud y mantenimiento de aplicaciones.
Proyectos
Una selección de proyectos donde aplico backend, APIs, bases de datos, infraestructura y desarrollo full stack.
Blog
Publicaciones técnicas sobre backend, APIs, bases de datos, seguridad, arquitectura y desarrollo de software.
Imagina que acabas de publicar una API. Los primeros días todo funciona perfectamente. Recibe unas cuantas peticiones por segundo. Los usuarios pueden consultar información sin problemas. Pero conforme tu aplicación crece... las solicitudes comienzan a aumentar. 10 peticiones por segundo. Luego 100. Después 1,000. Y de repente... un solo usuario, un bot o incluso un atacante empieza a enviar miles de solicitudes en cuestión de segundos. 😵 El servidor comienza a consumir toda su CPU. 😵 La memoria aumenta. 😵 Las respuestas se vuelven lentas. 😵 Los demás usuarios dejan de recibir servicio. ¿Cómo evitar que una sola persona afecte a todos los demás? La respuesta está en un mecanismo conocido como Rate Limiting . Aunque suele pasar desapercibido, es una de las primeras líneas de defensa que utilizan las APIs modernas para proteger su infraestructura. 🧠 ¿Qué es el Rate Limiting? El Rate Limiting es un mecanismo que limita la cantidad de peticiones que un usuario, una dirección IP, un dispositivo o una aplicación puede realizar durante un periodo determinado. Su funcionamiento es muy sencillo. La API establece una regla. Por ejemplo: 👉 100 peticiones por minuto. Mientras el cliente permanezca dentro de ese límite... la API responderá normalmente. Pero si intenta superar esa cantidad... el servidor comenzará a rechazar temporalmente las solicitudes. De esta forma evita que un solo cliente consuma todos los recursos disponibles. 🌍 ¿Por qué existe? Internet está lleno de aplicaciones públicas. Muchas de ellas reciben miles o incluso millones de peticiones todos los días. Sin ningún tipo de control podrían ocurrir situaciones como: 🤖 Bots realizando consultas masivas. 🔓 Ataques de fuerza bruta contra formularios de inicio de sesión. 📈 Aplicaciones mal programadas enviando miles de peticiones por error. 💥 Usuarios consumiendo recursos de forma excesiva. El resultado sería el mismo. El servidor tendría que dedicar gran parte de su capacidad a atender unas pocas solicitudes abusivas. Y los usuarios legítimos terminarían siendo los más afectados. El Rate Limiting existe precisamente para evitar ese escenario. ⚙️ ¿Cómo funciona? Imaginemos que una API establece la siguiente política. 100 solicitudes por minuto. El proceso podría verse así. 1️⃣ El cliente realiza una petición. 2️⃣ El servidor identifica quién la envió. 3️⃣ Incrementa un contador. 4️⃣ Verifica si el límite fue alcanzado. Si todavía quedan solicitudes disponibles: ✅ La petición continúa normalmente. Pero cuando el contador supera el límite establecido: ❌ La API rechaza temporalmente las nuevas solicitudes. Después de que transcurre el tiempo definido... el contador vuelve a comenzar desde cero. Y el cliente puede seguir utilizando el servicio. 🚀 ¿Qué responde la API? Cuando un cliente supera el límite permitido, normalmente recibe el código HTTP: 429 Too Many Requests Este código indica que el problema no está en la API. El problema es que el cliente ha realizado demasiadas solicitudes en un periodo muy corto. En muchos casos la respuesta también incluye encabezados como: Retry-After: 60 Indicando cuántos segundos debe esperar antes de volver a intentarlo. 💡 Un ejemplo cotidiano Imagina un restaurante. Solo hay diez mesas disponibles. Si cien personas intentan entrar al mismo tiempo... el restaurante no puede atenderlas a todas. Lo más razonable sería formar una fila y permitir el acceso poco a poco. Las APIs hacen algo muy parecido. No bloquean a los usuarios porque sí. Simplemente controlan el ritmo con el que reciben solicitudes para mantener el servicio estable. 🔥 ¿Por qué es tan importante? El Rate Limiting aporta muchos beneficios. Entre ellos: ✅ Evita abusos. ✅ Protege la infraestructura. ✅ Reduce la posibilidad de ataques automatizados. ✅ Distribuye mejor los recursos. ✅ Garantiza una experiencia más estable para todos los usuarios. Sin este mecanismo, una API pública sería mucho más vulnerable. 🛡️ Rate Limiting y seguridad Muchas personas piensan que el Rate Limiting únicamente sirve para mejorar el rendimiento. En realidad también es una herramienta muy importante de seguridad. Por ejemplo. Supongamos que un atacante intenta descubrir la contraseña de un usuario. Sin límites podría realizar: 1,000. 10,000. O incluso millones de intentos. Con Rate Limiting... después de unos pocos intentos la API comenzará a bloquear temporalmente nuevas solicitudes. Esto hace mucho más difícil ejecutar ataques de fuerza bruta. 🌐 ¿Cómo sabe la API a quién limitar? Existen diferentes estrategias. Las más utilizadas son: 🌍 Dirección IP. 👤 Usuario autenticado. 🔑 API Key. 📱 Identificador del dispositivo. 🍪 Sesión. Dependiendo del tipo de aplicación puede utilizarse una sola estrategia o combinar varias. Por ejemplo. Una API pública podría limitar por dirección IP. Mientras que una API privada podría hacerlo utilizando el usuario autenticado. ⚡ Algoritmos utilizados Detrás del Rate Limiting existen distintos algoritmos. Los más conocidos son: 🪣 Token Bucket El sistema dispone de una cantidad limitada de "tokens". Cada petición consume uno. Cuando se agotan... las nuevas solicitudes deben esperar. 🪣 Leaky Bucket Las peticiones entran en una especie de cubeta. Van saliendo poco a poco a una velocidad constante. Si llegan demasiadas... las sobrantes son rechazadas. ⏱️ Fixed Window Cuenta cuántas solicitudes se realizaron durante un intervalo fijo. Por ejemplo: 100 peticiones entre las 10:00 y las 10:01. Al comenzar el siguiente minuto... el contador vuelve a cero. 🔄 Sliding Window Es una versión más precisa. En lugar de trabajar con intervalos fijos... analiza continuamente el tiempo transcurrido. Esto evita algunos problemas presentes en el método anterior. 🌐 ¿Dónde suele implementarse? Una ventaja del Rate Limiting es que no necesariamente debe ejecutarse dentro del backend. Muchas veces se implementa antes de que la petición llegue a la aplicación. Por ejemplo mediante: 🟢 Nginx. ☁️ Cloudflare. 🌐 API Gateway. 🛡️ Kong. 🚀 Traefik. ⚡ Middlewares de Express. 🐍 Django. ⚡ Laravel. De esta forma muchas solicitudes abusivas se bloquean incluso antes de consumir recursos del servidor de aplicaciones. ⚠️ Un error muy común Algunos desarrolladores piensan que basta con aumentar la capacidad del servidor. Más CPU. Más memoria. Más servidores. Pero si una API permite solicitudes ilimitadas... el problema tarde o temprano volverá a aparecer. La solución no consiste únicamente en tener más recursos. También consiste en administrar inteligentemente cómo se utilizan. Y ahí es donde el Rate Limiting juega un papel fundamental. 🛠️ Buenas prácticas Cuando implementes Rate Limiting es recomendable: ✅ Definir límites razonables según el tipo de endpoint. ✅ Utilizar diferentes límites para usuarios autenticados y anónimos. ✅ Informar claramente cuándo un cliente superó el límite. ✅ Registrar intentos excesivos. ✅ Combinarlo con otras medidas de seguridad como CAPTCHA o autenticación multifactor. Así es posible proteger la API sin afectar innecesariamente la experiencia de los usuarios legítimos. 🌍 La realidad Cada vez que utilizas una API pública... ya sea de redes sociales, servicios bancarios, plataformas de mapas o comercio electrónico... es muy probable que exista un sistema contando silenciosamente cuántas solicitudes realizas. No porque quiera impedirte utilizar el servicio. Sino porque necesita garantizar que millones de personas puedan acceder a él de forma justa y segura. Gracias al Rate Limiting, una sola persona no puede monopolizar los recursos de toda la infraestructura. 🚀 Conclusión El Rate Limiting es un mecanismo que controla cuántas solicitudes puede realizar un cliente durante un periodo determinado. Su objetivo no es únicamente mejorar el rendimiento de una API. También protege frente a abusos, ataques automatizados y consumo excesivo de recursos. Implementarlo correctamente ayuda a construir servicios más estables, seguros y preparados para crecer. Porque una buena API no solo responde rápido. También sabe cuándo debe poner límites para seguir funcionando correctamente para todos. 💬 ¿Has implementado Rate Limiting en tus APIs? ¿Qué estrategia utilizas normalmente: por IP, por usuario autenticado o mediante API Keys? 👀 🔥 El backend no se ve, pero sin él, nada funciona. #Backend #RateLimiting #Seguridad #APIs #Ciberseguridad #SoftwareEngineering #Programación #Nginx #Cloudflare #DesarrolloBackend
Cuando inicias sesión en una aplicación... es normal que escribas tu usuario y contraseña una sola vez. Después puedes navegar entre distintas pantallas, consultar información o realizar operaciones sin volver a introducir tus credenciales en cada petición. Pero entonces surge una pregunta muy interesante. 👉 ¿Cómo sabe el servidor que sigues siendo tú si HTTP no recuerda nada entre una petición y otra? La respuesta, en muchas aplicaciones modernas, está en un JWT . Aunque para muchos desarrolladores es simplemente una cadena larga de caracteres, detrás de ella existe un mecanismo cuidadosamente diseñado para transportar información de forma segura entre el cliente y el servidor. Comprender cómo funciona realmente un JWT es fundamental para desarrollar APIs seguras y entender muchos de los sistemas de autenticación actuales. 🧠 ¿Qué es un JWT? JWT significa JSON Web Token . Es un estándar abierto (RFC 7519) utilizado para transmitir información entre dos partes de forma compacta y verificable. Su principal objetivo es transportar información relacionada con un usuario después de que este ha sido autenticado. Es importante aclarar algo que suele generar confusión. Un JWT no autentica al usuario . La autenticación ocurre antes. Por ejemplo: ✅ El usuario escribe su correo y contraseña. ✅ El servidor verifica que las credenciales sean correctas. Solo después de esa verificación se genera un JWT. A partir de ese momento, el token sirve para demostrar la identidad del usuario en las siguientes peticiones. 🌍 ¿Por qué existe? Recordemos que HTTP es un protocolo sin estado ( stateless ). Eso significa que cada petición es completamente independiente. Cuando un navegador solicita información, el servidor no recuerda automáticamente quién hizo la petición anterior. Sin algún mecanismo adicional, el usuario tendría que iniciar sesión una y otra vez. JWT resuelve ese problema. El servidor entrega un token al cliente. Y posteriormente el cliente envía ese mismo token en cada solicitud. Así el servidor puede verificar rápidamente quién realiza la petición. ⚙️ ¿Cómo está compuesto? Un JWT está formado por tres partes. Header.Payload.Signature Cada sección está separada por un punto. Aunque visualmente parece una sola cadena de texto... internamente cada parte tiene una función muy específica. 🏷️ 1. Header El Header contiene información sobre el propio token. Normalmente incluye: ✅ El algoritmo utilizado para generar la firma. ✅ El tipo de token. Por ejemplo: { "alg": "HS256", "typ": "JWT" } El servidor utiliza esta información para saber cómo verificar posteriormente el token. 📄 2. Payload El Payload contiene la información que viajará dentro del token. Aquí suelen encontrarse datos como: 👤 ID del usuario. 📧 Correo electrónico. 👥 Roles. 🛡️ Permisos. ⏳ Fecha de expiración. 🏢 Organización. 🔑 Identificador único del token. Por ejemplo: { "user_id": 15, "email": "herman@email.com", "role": "admin" } Aquí aparece uno de los errores más comunes. Muchas personas creen que esta información está protegida porque el token "se ve raro". Pero no es así. ⚠️ El Payload NO está cifrado El Payload simplemente está codificado en Base64URL . Eso significa que cualquier persona que posea el token puede decodificarlo fácilmente. Por esa razón: ❌ Nunca debes almacenar contraseñas. ❌ Nunca debes guardar números de tarjetas. ❌ Nunca debes incluir información confidencial. El Payload únicamente debe contener información que pueda ser leída sin comprometer la seguridad del sistema. 🛡️ 3. Signature La tercera parte es probablemente la más importante. La firma . Es la encargada de garantizar que nadie haya modificado el token. Para generarla el servidor utiliza: 🔑 Una clave secreta. O bien: 🔐 Una clave privada, dependiendo del algoritmo utilizado. La firma se calcula utilizando: El Header. El Payload. La clave secreta. Cuando el servidor recibe nuevamente el JWT... realiza exactamente el mismo cálculo. Si ambas firmas coinciden: ✅ El token es auténtico. Si alguien modificó un solo carácter... aunque sea el nombre del usuario o la fecha de expiración... la firma cambia completamente. Y el servidor rechaza el token inmediatamente. 💡 ¿Cómo funciona todo el proceso? El flujo completo suele verse así. 1️⃣ El usuario inicia sesión. 2️⃣ El backend verifica las credenciales. 3️⃣ Si son correctas, genera un JWT firmado. 4️⃣ Devuelve el token al cliente. 5️⃣ El cliente lo almacena. 6️⃣ En cada petición posterior lo envía al servidor. 7️⃣ El servidor verifica la firma. 8️⃣ Si todo es correcto... permite acceder al recurso solicitado. Todo este proceso suele completarse en apenas unos milisegundos. 🌐 ¿Dónde se envía el JWT? Lo más habitual es utilizar el encabezado HTTP Authorization . Por ejemplo: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... El prefijo Bearer indica que el cliente está presentando un token de acceso. El servidor extrae el JWT, verifica la firma y decide si la petición puede continuar. 🚀 ¿Por qué se utiliza tanto? JWT ofrece varias ventajas importantes. Entre ellas: ✅ APIs completamente Stateless. ✅ Menor necesidad de consultar la base de datos. ✅ Mejor escalabilidad. ✅ Fácil integración entre diferentes servicios. ✅ Compatibilidad con aplicaciones móviles. ✅ Muy útil en arquitecturas de microservicios. Por eso se ha convertido en uno de los mecanismos más utilizados para proteger APIs REST. 🔥 Stateless: una de sus mayores ventajas Con sesiones tradicionales... el servidor debe recordar a cada usuario. Eso normalmente implica almacenar información en memoria o en una base de datos. Con JWT ocurre algo diferente. Toda la información necesaria viaja dentro del propio token. El servidor únicamente necesita verificar la firma. Esto simplifica enormemente el trabajo cuando existen múltiples servidores atendiendo miles de peticiones simultáneamente. 🌍 JWT en microservicios En arquitecturas de microservicios esto resulta especialmente útil. Supongamos una plataforma formada por varios servicios. 👤 Servicio de usuarios. 🛒 Servicio de pedidos. 💳 Servicio de pagos. 📦 Servicio de inventario. Todos ellos pueden verificar el mismo JWT. No necesitan preguntar constantemente al servidor de autenticación quién es el usuario. Esto reduce el número de consultas y mejora el rendimiento general del sistema. ⚠️ Errores muy comunes Existen varias ideas equivocadas alrededor de JWT. Una de las más frecuentes es pensar que el token está cifrado. No lo está. Está firmado. Otra es almacenar demasiada información dentro del Payload. Mientras más datos contenga el token... más grande será cada petición HTTP. También es un error generar tokens sin fecha de expiración. Si un atacante obtiene un JWT válido que nunca expira... podría utilizarlo indefinidamente. 🛠️ Buenas prácticas Cuando implementes autenticación con JWT es recomendable: ✅ Utilizar HTTPS. ✅ Definir tiempos de expiración razonables. ✅ Firmar siempre los tokens con algoritmos seguros. ✅ No almacenar información sensible en el Payload. ✅ Revocar tokens comprometidos cuando sea necesario. ✅ Utilizar Refresh Tokens para sesiones prolongadas. Estas prácticas ayudan a reducir muchos riesgos de seguridad. 🌍 JWT está en todas partes Aunque muchas veces no lo notes, JWT se utiliza en una enorme cantidad de aplicaciones modernas. 📱 Aplicaciones móviles. 🌐 APIs REST. ☁️ Microservicios. 🔗 Integraciones entre plataformas. 🛒 Comercio electrónico. 🏦 Sistemas bancarios. Cada vez que una aplicación recuerda quién eres sin pedirte nuevamente la contraseña... es muy probable que exista un JWT trabajando detrás de escena. 🧩 La realidad Un JWT puede parecer únicamente una cadena larga de caracteres. Pero en realidad contiene toda la información necesaria para que un servidor identifique al usuario, conozca sus permisos y verifique que nadie ha manipulado esos datos durante el viaje. Su verdadero valor no consiste en ocultar información. Consiste en garantizar que esa información no pueda modificarse sin ser detectada. Por eso se ha convertido en una pieza fundamental de la seguridad en las APIs modernas. 🚀 Conclusión JWT es un mecanismo seguro y eficiente para transportar información relacionada con un usuario después de que ha sido autenticado. Gracias a su estructura compuesta por Header, Payload y Signature, permite que el servidor verifique rápidamente la identidad del cliente sin necesidad de consultar constantemente la base de datos. Sin embargo, es importante recordar que un JWT no cifra la información. Su función principal es garantizar la integridad de los datos mediante una firma criptográfica. Comprender esta diferencia ayuda a implementar sistemas de autenticación mucho más seguros y evitar errores muy comunes durante el desarrollo. Porque al final... un JWT no existe para ocultar la información. Existe para demostrar que esa información sigue siendo exactamente la misma que el servidor generó. 💬 ¿En tus proyectos prefieres implementar autenticación con JWT , sesiones tradicionales o una combinación de ambas tecnologías? 👀 🔥 El backend no se ve, pero sin él, nada funciona. #JWT #Backend #Seguridad #APIs #JSONWebToken #Autenticación #SoftwareEngineering #Programación #DesarrolloBackend #Ciberseguridad
Cuando un usuario hace una petición a una API... es fácil imaginar que la solicitud llega directamente al controlador que contiene la lógica del negocio. Pero en una aplicación moderna eso casi nunca ocurre. Antes de que el controlador reciba la petición... esta suele atravesar una serie de componentes encargados de verificar que todo esté en orden. ¿El usuario está autenticado? ¿Tiene permisos para acceder? ¿La petición cumple con las reglas esperadas? ¿Debe registrarse en los logs? ¿Se superó el límite de peticiones permitido? Todas estas comprobaciones suelen realizarse antes de ejecutar una sola línea de código del controlador. A esos componentes se les conoce como middlewares . Y aunque normalmente trabajan de forma silenciosa, son una de las piezas más importantes en la arquitectura de cualquier aplicación backend. 🧠 ¿Qué es un middleware? Un middleware es un componente que se ejecuta entre la petición del cliente y el controlador . Su función es interceptar cada solicitud para realizar alguna tarea antes de que llegue a la lógica principal de la aplicación. Podemos imaginarlo como un filtro. Cada petición que entra al sistema debe atravesar una serie de filtros antes de obtener acceso al controlador. Si todo está correcto... la petición continúa su camino. Si alguno de los filtros detecta un problema... la petición puede detenerse inmediatamente. En otras palabras... 👉 un middleware decide si una solicitud puede seguir avanzando o no. 🌍 ¿Por qué existen los middlewares? Imagina una aplicación con cien endpoints. Si cada controlador tuviera que verificar: 🔐 La autenticación. 👥 Los permisos. 📋 Los registros de auditoría. 🌐 La configuración de CORS. 🚦 El límite de peticiones. Estarías escribiendo exactamente el mismo código una y otra vez. Además de ser repetitivo... sería muy difícil de mantener. Los middlewares existen para evitar esa duplicación. Permiten centralizar tareas comunes y reutilizarlas en toda la aplicación. Así, cada controlador puede concentrarse únicamente en resolver el problema de negocio para el que fue creado. ⚙️ ¿Cómo funciona? De forma simplificada, el flujo de una petición suele verse así: 👤 Usuario ⬇️ 🌐 Petición HTTP ⬇️ 🛡️ Middleware ⬇️ 🛡️ Middleware ⬇️ 🛡️ Middleware ⬇️ 🎯 Controlador ⬇️ 🗄️ Base de datos ⬇️ 📤 Respuesta Cada middleware recibe la petición. Puede modificarla. Validarla. Registrar información. O incluso detenerla completamente. Cuando termina su trabajo... la envía al siguiente middleware. Y solo después de atravesar toda esa cadena llega al controlador. 💡 Un ejemplo real Supongamos que un usuario intenta acceder al siguiente endpoint: GET /api/usuarios Antes de llegar al controlador pueden ejecutarse varias verificaciones. 1️⃣ Comprobar que existe un token de autenticación. 2️⃣ Validar que el JWT sea correcto. 3️⃣ Revisar que el usuario no haya expirado su sesión. 4️⃣ Confirmar que posee permisos para consultar usuarios. 5️⃣ Registrar la petición en los logs. 6️⃣ Medir cuánto tarda la solicitud. Si todo sale correctamente... el controlador finalmente obtiene la petición y consulta la base de datos. Pero si cualquiera de esos pasos falla... la petición termina ahí mismo. El controlador ni siquiera llega a ejecutarse. 🚀 ¿Qué tareas puede realizar un middleware? Los middlewares son extremadamente versátiles. Entre las tareas más comunes encontramos: 🔐 Verificar autenticación. 👥 Validar permisos y roles. 📋 Registrar logs. 📊 Medir tiempos de respuesta. 🌍 Configurar CORS. 🛡️ Proteger contra ataques. 🚦 Aplicar Rate Limiting. 📄 Validar encabezados HTTP. 🔄 Agregar información a la petición. 📝 Registrar auditorías. Cada middleware suele tener una única responsabilidad. Y precisamente esa simplicidad hace que el código sea mucho más limpio. 🔒 Middleware de autenticación Uno de los más utilizados. Su trabajo consiste en responder una pregunta muy sencilla. 👉 ¿Quién eres? Verifica credenciales como: 🔑 JWT. 🍪 Cookies de sesión. 🔐 Tokens OAuth. Si la identidad del usuario no puede comprobarse... la petición termina inmediatamente. 👥 Middleware de autorización Una vez autenticado el usuario... todavía queda otra pregunta. 👉 ¿Qué puede hacer? Este middleware revisa: Roles. Permisos. Políticas de acceso. Si un usuario intenta acceder a una zona restringida... el middleware devuelve un error sin permitir que el controlador se ejecute. 📋 Middleware de logs Otro middleware muy habitual. Cada petición queda registrada. Por ejemplo: 📅 Fecha. 🌐 Dirección IP. 👤 Usuario. 📍 Endpoint solicitado. ⏱️ Tiempo de respuesta. Estos registros resultan muy útiles para monitoreo, auditorías y solución de problemas. 🚦 Middleware de Rate Limiting Imagina que alguien intenta enviar diez mil peticiones por segundo. Sin protección... podría saturar el servidor. Un middleware de Rate Limiting permite establecer límites como: 100 solicitudes por minuto. 500 solicitudes por hora. Cuando un cliente supera ese límite... la petición se bloquea automáticamente. Esto ayuda a proteger la infraestructura frente a abusos y ataques. 🌐 Middleware de CORS Cuando un frontend intenta consumir una API ubicada en otro dominio... el navegador aplica las reglas de CORS. Muchos frameworks utilizan un middleware para indicar: Qué dominios están permitidos. Qué métodos HTTP pueden utilizarse. Qué encabezados son válidos. Todo esto ocurre antes de ejecutar cualquier controlador. 🔥 ¿Se pueden utilizar varios middlewares? Sí. Y de hecho es lo más común. Una sola petición puede atravesar cinco, diez o incluso más middlewares antes de llegar a su destino. Por ejemplo: 🛡️ CORS. ⬇️ 📋 Logs. ⬇️ 🔐 Autenticación. ⬇️ 👥 Autorización. ⬇️ 🚦 Rate Limiting. ⬇️ 🎯 Controlador. Cada uno realiza una tarea muy específica. Y después entrega la petición al siguiente. 🌐 Frameworks que utilizan middlewares Prácticamente todos los frameworks modernos implementan este patrón. Entre ellos encontramos: 🐍 Django. 🟢 Express.js. ⚡ Laravel. ☕ Spring Boot. 🦫 ASP.NET Core. ⚡ FastAPI. 🟩 NestJS. Aunque cada framework utiliza una implementación distinta... la idea siempre es la misma. Interceptar la petición antes de que llegue al controlador. ⚠️ Un error muy común Cuando alguien comienza a desarrollar APIs suele escribir toda la lógica directamente dentro del controlador. Por ejemplo: Validar autenticación. Revisar permisos. Registrar logs. Controlar errores. Validar encabezados. El resultado suele ser un controlador enorme y difícil de mantener. Los middlewares existen precisamente para evitar ese problema. Cada componente se ocupa únicamente de una responsabilidad. Y el controlador queda mucho más limpio. 🛠️ Buenas prácticas Cuando trabajes con middlewares es recomendable: ✅ Que cada middleware tenga una única responsabilidad. ✅ Evitar lógica de negocio dentro de ellos. ✅ Mantenerlos reutilizables. ✅ Ejecutar primero los más importantes, como autenticación. ✅ Registrar únicamente la información necesaria. Siguiendo estas prácticas es mucho más sencillo mantener una aplicación conforme crece. 🌍 La realidad Cada vez que consumes una API... es muy probable que tu petición atraviese varios middlewares antes de que el backend procese realmente tu solicitud. Aunque nunca los veas... ellos verifican autenticación. Controlan permisos. Registran actividad. Aplican políticas de seguridad. Protegen contra abusos. Y preparan toda la información para que el controlador solo tenga que resolver el problema de negocio. Son uno de esos componentes que casi nadie nota... pero sin ellos muchas aplicaciones modernas serían mucho más difíciles de desarrollar y mantener. 🚀 Conclusión Los middlewares son componentes que interceptan las peticiones antes de que lleguen al controlador para ejecutar tareas comunes como autenticación, autorización, validaciones, registros o configuración de seguridad. Gracias a ellos es posible reutilizar código, mantener los controladores limpios y organizar mejor la arquitectura de una aplicación. En lugar de repetir las mismas verificaciones en cada endpoint, los middlewares permiten centralizar responsabilidades y construir sistemas más seguros, mantenibles y escalables. Porque un buen controlador debería concentrarse únicamente en resolver la lógica del negocio. Todo lo demás... puede quedar en manos de un buen middleware. 💬 ¿Cuál es el middleware que consideras indispensable en cualquier API moderna: autenticación, autorización, logs, validaciones o rate limiting? 👀 🔥 El backend no se ve, pero sin él, nada funciona. #Backend #Middleware #Arquitectura #APIs #Programación #SoftwareEngineering #Django #ExpressJS #Laravel #DesarrolloBackend
Contacto
Escríbeme un mensaje por WhatsApp.
Mensaje rápido
Llena los campos y se abrirá WhatsApp con un mensaje listo para enviar.