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 doPHP_URL_PATHisola apenas o trecho do caminho necessário para o roteamento. - Mapeamento bidimensional: Organizar a tabela de rotas separando primeiro pelo verbo (
GETouPOST) 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.phpprincipal (utilizando.htaccessou blocoslocation). - Tratamento de status HTTP: O retorno do código
404viahttp_response_code()ou201para criações garante o alinhamento com os padrões RESTful no envio de respostas ao cliente.
