Sobes.tech
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);
    }
}