Sobes.tech
Middle

¿Qué es middleware?

sobes.tech AI

Respuesta de la IA

El middleware (software intermedio) es una capa de software o marco que procesa las solicitudes HTTP entrantes antes de que lleguen al controlador final (por ejemplo, un controlador), y las respuestas HTTP salientes después del procesamiento. Realiza diversas acciones: autenticación, autorización, registro, modificación de solicitudes/respuestas, etc. Los middlewares generalmente forman una canalización (pipeline), donde cada middleware realiza su función y pasa la solicitud al siguiente o al manejador final.

Ejemplo en PHP (usando PSR-7/PSR-15):

<?php

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class AuthenticationMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Verificación de autenticación del usuario
        if (!$this->isAuthenticated($request)) {
            // Si el usuario no está autenticado, devolver un error
            return new \Slim\Psr7\Response(401); // Ejemplo de creación de respuesta PSR-7
        }

        // Si el usuario está autenticado, pasa la solicitud al siguiente manejador
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Lógica para verificar autenticación (por ejemplo, encabezados, sesión, etc.)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Registramos información de la solicitud antes de procesarla
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Pasamos la solicitud al siguiente manejador y obtenemos la respuesta
        $response = $handler->handle($request);

        // Registramos información de la respuesta después del procesamiento
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Devolvemos la respuesta
        return $response;
    }
}

// Ejemplo de uso en un enrutador (simplificado)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Los middlewares permiten descomponer la lógica de procesamiento de solicitudes, haciendo el código más modular, reutilizable y fácil de probar. Siguen el principio de "responsabilidad única".