Roteamento Dinâmico de Requisições GET e POST com $_SERVER[‘REQUEST_URI’] em PHP

Roteamento Dinâmico de Requisições GET e POST com $_SERVER[‘REQUEST_URI’] em PHP

Capturar e processar dinamicamente os caminhos de URL da superglobal $_SERVER['REQUEST_URI'] permite estruturar rotas amigáveis sem depender de bibliotecas externas. Esta abordagem resolve a necessidade de centralizar o ponto de entrada da aplicação (Front Controller), direcionando requisições GET e POST para suas respectivas funções de tratamento.

PHP

<?php

/**
 * Mapeia e executa rotas com base no método HTTP e na URI requisitada.
 *
 * @param string $uri Categoria ou caminho requisitado ($_SERVER['REQUEST_URI']).
 * @param string $method Método HTTP utilizado na requisição ($_SERVER['REQUEST_METHOD']).
 * @param array $routes Tabela de rotas registradas na aplicação.
 * @return void
 */
function handleRequest(string $uri, string $method, array $routes): void
{
    // Limpa a URI removendo barras sobressalentes e a Query String (?id=1)
    $cleanPath = parse_url($uri, PHP_URL_PATH);
    $normalizedPath = '/' . trim($cleanPath, '/');
    $httpMethod = strtoupper($method);

    // Verifica se a combinação de Método e Rota existe na tabela
    if (isset($routes[$httpMethod][$normalizedPath])) {
        // Executa o handler (callback) associado à rota
        call_user_func($routes[$httpMethod][$normalizedPath]);
        return;
    }

    // Retorna erro 404 para rotas não mapeadas
    http_response_code(404);
    echo json_encode(['status' => 404, 'mensagem' => 'Página ou recurso não encontrado']);
}

// --- Exemplo de Uso Prático ---

// Definição das rotas registradas no sistema
$appRoutes = [
    'GET' => [
        '/' => function() {
            echo json_encode(['pagina' => 'Home']);
        },
        '/usuarios' => function() {
            echo json_encode(['usuarios' => ['Ana', 'Carlos', 'Mariana']]);
        }
    ],
    'POST' => [
        '/usuarios' => function() {
            http_response_code(201);
            echo json_encode(['status' => 'sucesso', 'mensagem' => 'Usuário cadastrado']);
        }
    ]
];

// Simulação de uma requisição POST enviada pelo cliente HTTP
$requestUri = '/usuarios?origem=mobile';
$requestMethod = 'POST';

// Dispara o manipulador de requisição
handleRequest($requestUri, $requestMethod, $appRoutes);
  • Sanitização da URI (parse_url): A superglobal $_SERVER['REQUEST_URI'] traz todo o caminho junto com parâmetros GET; o uso do PHP_URL_PATH isola apenas o trecho do caminho necessário para o roteamento.
  • Mapeamento bidimensional: Organizar a tabela de rotas separando primeiro pelo verbo (GET ou POST) evita colisões e permite que rotas com a mesma URL realizem ações diferentes dependendo da intenção da requisição.
  • Configuração de servidor (RewriteEngine): Para que essa estrutura funcione na prática em servidores Apache ou Nginx, é necessário redirecionar todas as requisições para um arquivo index.php principal (utilizando .htaccess ou blocos location).
  • Tratamento de status HTTP: O retorno do código 404 via http_response_code() ou 201 para criações garante o alinhamento com os padrões RESTful no envio de respostas ao cliente.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *