Middle
Para que é que o middleware é utilizado nas aplicações?
sobes.tech IA
Resposta da IA
Middleware em aplicações web é um software intermédio que processa pedidos e respostas HTTP. Encontra-se entre o servidor web e a lógica principal da aplicação.
As principais tarefas do middleware:
- Pré-processamento do pedido:
- Autenticação e autorização do utilizador.
- Análise dos dados entrantes do pedido (JSON, XML, etc.).
- Validação dos dados do pedido.
- Registo de pedidos.
- Adição de cabeçalhos ao pedido.
- Pós-processamento da resposta:
- Modificação da resposta antes de a enviar ao cliente (por exemplo, adição de cabeçalhos).
- Compressão da resposta.
- Gestão de erros (excepções).
- Gestão do fluxo de execução: O middleware pode interromper o processamento do pedido e devolver uma resposta numa fase inicial (por exemplo, na ausência de permissões de acesso).
Vantagens do uso de middleware:
- Modularidade: Divisão de tarefas em componentes independentes e reutilizáveis.
- Flexibilidade: Adicionar ou remover funcionalidades facilmente sem alterar a lógica principal da aplicação.
- Legibilidade do código: Melhoria da estrutura da aplicação através da separação de operações transversais.
- Testabilidade: Os middleware individuais são mais fáceis de testar de forma isolada.
Nos frameworks PHP (como Laravel, Symfony, Slim), o middleware é frequentemente implementado na forma de classes que implementam uma interface específica.
<?php
// Exemplo de estrutura de middleware (interface)
interface RequestHandlerInterface {
public function handle(RequestInterface $request): ResponseInterface;
}
// Exemplo de implementação de middleware (autenticação)
class AuthenticationMiddleware implements RequestHandlerInterface {
public function handle(RequestInterface $request): ResponseInterface {
// Verificação de autenticação
if (!isAuthenticated()) {
// Se o utilizador não estiver autenticado, interrompe a execução e devolve um erro
return new Response(401, [], 'Unauthorized');
}
// Se tudo estiver bem, passa a requisição ao próximo manipulador (ou lógica principal da aplicação)
return $this->nextHandler->handle($request);
}
}