Clicky

Qué es el middleware

middleware

Es un sistema de software que ofrece servicios y funciones comunes para las aplicaciones

Es posible que hayas escuchado a personas usar el término "middleware" en varios contextos y te hayas preguntado de qué están hablando. Descubre el amplio y rico conjunto de tecnologías y procesos a los que podrían estar haciendo referencia.

El middleware significa muchas cosas

Middleware es un término flexible que usa la gente para significar cosas diferentes. En el sentido más amplio posible, puedes considerarlo como "programas que se ejecutan entre otros programas". En otras palabras, cualquier software que dependa de un código independiente para proporcionar su entrada y procesar su salida.

Algunos middleware existen como aplicaciones completas que transforman datos de un estado a otro, con protocolos y formatos de datos bien definidos para que los utilicen otros códigos. Pero el middleware también puede ser tan granular como una sola función, conectándose a una serie de otras funciones que ejecuta un framework.

Como gran parte del software, el middleware aprovecha el concepto de modularidad: dividir un proceso complejo en partes más pequeñas y manejables.

¿Cómo funciona el middleware?

El middleware suele ser tan sólido como sus protocolos y su comportamiento definido públicamente. Los estrictos protocolos de comunicación permiten a los programadores escribir software que cumpla con los estándares para funcionar correctamente.

Un servidor de aplicaciones web actúa como middleware para conectar la experiencia de usuario de un sitio web con la lógica y el modelo de datos que proporcionan una aplicación de back-end y una base de datos. Dado que no está estrechamente acoplado a los sistemas que se comunican con él, puede (al menos, en teoría) cambiar un servidor de aplicaciones por uno compatible sin tener que reescribir el código de la aplicación o reestructurar su base de datos.

Los componentes de middleware suelen utilizar tecnologías como JSON, REST, XML y SOAP. Todos ellos son maduros, populares y están basados en texto, lo que hace que sea mucho más fácil intercambiar o reordenar componentes. Su formato basado en texto y su amplia gama de conjuntos de herramientas también permiten una depuración más sencilla y fiable.

Diferentes tipos de middleware

Debido a que el término es tan amplio, existen muchos ejemplos y diferentes usos del middleware. Algunos de los más comunes incluyen:

•Corredores de mensajes, que añaden estructura a la comunicación entre procesos.
• Servidor de aplicaciones web y frameworks web.
• Motores de juegos, que proporcionan un comportamiento predeterminado que puedes usar, ampliar o reemplazar.
• Plataformas de transmisión de eventos como Apache Kafka.

Uso de middleware en el desarrollo de software

Uno de los usos más tangibles del middleware es a través de frameworks web. La mayoría de los frameworks proporcionan un entorno central que se puede personalizar y ampliar según sus propios requisitos. El modelo a menudo implica pasar solicitudes HTTP a través de una serie de funciones integradas y personalizadas, en un orden definido, y devolver una respuesta HTTP al final.

El marco Express.js utiliza este modelo para admitir la personalización. Este es un ejemplo de una función de middleware escrita en JavaScript:

app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})

La función es extremadamente simple:

1. Procesa URL específicas que comienzan con "/user/", seguidas de una identificación.
2. Registra el tipo de método de solicitud que puede ser GET, POST, etc.
3. A continuación, llama a una función proporcionada para continuar procesando la cadena de funciones del middleware.

Esa última llamada a lo siguiente es un paso vital en el proceso de middleware y demuestra cuán versátil puede ser el enfoque. Siempre que cada función de middleware se comporte de forma independiente, puedes intercambiarlas y reordenar fácilmente el comportamiento de toda la cadena.

El framework PHP, Laravel, tiene una configuración de middleware casi idéntica. Observa cómo el espacio de nombres define explícitamente esta clase como "Middleware".

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureTokenIsValid
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}

return $next($request);
}
}

Nuevamente, el rol de esta clase en particular es muy específico: todo lo que hace es verificar la solicitud para ver si contiene un token. En este caso, la función de middleware puede romper la cadena, negándose a llamar a la siguiente función y, en su lugar, enviando una redirección. La función de redirección devolverá un objeto Response apropiado, que la función de middleware debería devolver como parte de su contrato de firma.

Este último ejemplo muestra cómo Django, un framework web basado en Python, maneja el middleware. Django utiliza el término "plugin" para describir su arquitectura de middleware, que es similar a otros términos relevantes que puedes escuchar como "hook" o "callback". En esencia, es simplemente otro caso de configuración de middleware que proporciona flexibilidad a lo largo de un proceso estructurado.

def simple_middleware(get_response):
# One-time configuration and initialization.

def middleware(request):
# Code to be executed for each request before
# the view (and later middleware) are called.

response = get_response(request)

# Code to be executed for each request/response after
# the view is called.

return response

return middleware

Luego puedes controlar qué middleware se ejecuta y en qué orden, con una matriz simple:

MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]

Django proporciona un comportamiento predeterminado como la clase CommonMiddleware de la que se beneficiarán la mayoría de las aplicaciones; prohíbe el acceso a ciertos agentes de usuario "malos" y maneja la normalización de URL. Es bastante común que el middleware centrado en la seguridad y de misión crítica se ejecute en las primeras etapas del proceso, pero esta flexibilidad permite personalizar el orden según las necesidades de la aplicación.

¿Por qué es útil el middleware?

El middleware facilita la conexión de aplicaciones que no fueron diseñadas para estar conectadas. Proporciona funcionalidad para integrarlos, junto con protocolos estructurados y sólidos mediante los cuales pueden comunicarse.

Como resultado, el middleware tiene algunos importantes beneficios, que incluyen:

• Desarrollo de aplicaciones optimizado y tiempo de comercialización reducido.
• Conectividad eficiente.
• Transición más rápida de cambios.
• Herramientas de trabajo de fácil acceso.

En última instancia, el middleware es una forma de modularidad, un concepto que resulta beneficioso cuando se aplica a todas las formas de programación, desde el nivel más alto hasta el más bajo.