Sobes.tech
Middle

O que é middleware?

sobes.tech IA

Resposta da IA

O middleware (software intermédio) é uma camada de software ou estrutura que processa as solicitações HTTP de entrada antes de chegarem ao manipulador final (por exemplo, um controlador), e as respostas HTTP de saída após o processamento. Ele realiza várias ações: autenticação, autorização, registo, modificação de pedido/resposta, etc. Os middlewares geralmente formam um pipeline, onde cada middleware executa sua função e passa a solicitação ao próximo ou ao manipulador final.

Exemplo em 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
    {
        // Verificação de autenticação do utilizador
        if (!$this->isAuthenticated($request)) {
            // Se o utilizador não estiver autenticado, devolver um erro
            return new \Slim\Psr7\Response(401); // Exemplo de criação de resposta PSR-7
        }

        // Se o utilizador estiver autenticado, passar a solicitação ao próximo manipulador
        return $handler->handle($request);
    }

    private function isAuthenticated(ServerRequestInterface $request): bool
    {
        // Lógica para verificar autenticação (por exemplo, cabeçalhos, sessão, etc.)
        return true; // Placeholder
    }
}

class LoggingMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // Registar informações sobre a solicitação antes do seu processamento
        $method = $request->getMethod();
        $uri = (string) $request->getUri();
        error_log("Handling request: $method $uri");

        // Passar a solicitação ao próximo manipulador e obter a resposta
        $response = $handler->handle($request);

        // Registar informações sobre a resposta após o processamento
        $statusCode = $response->getStatusCode();
        error_log("Response status: $statusCode");

        // Devolver a resposta
        return $response;
    }
}

// Exemplo de uso no roteador (simplificado)
// $router->addMiddleware(new AuthenticationMiddleware());
// $router->addMiddleware(new LoggingMiddleware());
// $router->addRoute('GET', '/profile', new ProfileHandler());

Os middlewares permitem decompor a lógica de processamento de pedidos, tornando o código mais modular, reutilizável e facilmente testável. Eles seguem o princípio de "responsabilidade única".