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".