Rotas e Middlewares
Como definir endpoints e protegê-los.
Definindo rotas
O arquivo Routes/web.php do módulo é carregado automaticamente. A variável $router é injetada pelo kernel via include — declare o @var no topo para ter autocomplete na IDE e deixar o contrato explícito:
php
<?php
/** @var \Src\Kernel\Contracts\RouterInterface $router */
// Métodos disponíveis
$router->get('/api/recurso', [Controller::class, 'listar']);
$router->post('/api/recurso', [Controller::class, 'criar']);
$router->put('/api/recurso/{uuid}', [Controller::class, 'atualizar']);
$router->patch('/api/recurso/{uuid}', [Controller::class, 'parcial']);
$router->delete('/api/recurso/{uuid}',[Controller::class, 'deletar']);
Por que o
$router aparece "do nada"?
O kernel carrega o arquivo de rotas com include, injetando $router no escopo. É o mesmo padrão do Laravel (Route::), Express (app.get) e Slim. O @var documenta o contrato e ativa o autocomplete — sem ele o código funciona, mas fica implícito.
Parâmetros de rota
php
// Definição
$router->get('/api/usuario/{uuid}', [UsuarioController::class, 'buscar']);
// No Controller
public function buscar(Request $request): Response
{
$uuid = $request->param('uuid'); // captura {uuid}
// ...
}
Middlewares disponíveis
| Middleware | Quando usar |
|---|---|
AuthHybridMiddleware | Qualquer rota que exige usuário logado. |
AdminOnlyMiddleware | Rotas exclusivas para admin_system. |
RateLimitMiddleware | Limitar requisições por IP/usuário. |
CircuitBreakerMiddleware | Rotas que dependem de banco ou serviços externos. |
ApiTokenMiddleware | Rotas acessadas por tokens de API (integrações). |
Configurando Rate Limit
php
$loginLimit = [RateLimitMiddleware::class, [
'limit' => 10, // max requisições
'window' => 60, // janela em segundos
'key' => 'auth.login', // chave única para este limite
'user_limit' => 5, // limite por usuário autenticado (opcional)
]];
$router->post('/api/login', [AuthController::class, 'login'], [$loginLimit]);
Rotas nativas do sistema
Os módulos Auth e Usuario já vêm com as seguintes rotas registradas:
Módulo Auth
| Método | Rota | Acesso | Descrição |
|---|---|---|---|
| POST | /api/auth/login | Pública | Login. Rate limit: 10/min. |
| POST | /api/login | Pública | Alias de login. |
| POST | /api/auth/refresh | Pública | Renova access token via refresh token. Rate limit: 20/min. |
| GET | /api/auth/me | Auth | Dados do usuário autenticado. |
| POST | /api/auth/logout | Auth | Logout — revoga tokens. |
| POST | /api/auth/recuperacao-senha | Pública | Solicita reset de senha. Rate limit: 5/min. |
| POST | /api/auth/resetar-senha | Pública | Redefine senha com token. |
| GET | /api/recuperar-senha/validar/{token} | Pública | Valida token de recuperação. |
| GET | /api/auth/verify-email | Pública | Verifica e-mail via token. |
| GET | /api/auth/email-verification | Auth | Política de verificação de e-mail. |
Módulo Usuario
| Método | Rota | Acesso | Descrição |
|---|---|---|---|
| POST | /api/registrar | Pública | Registro de novo usuário. Rate limit: 5/min. |
| GET | /api/perfil | Auth | Dados do perfil autenticado. |
| PUT | /api/perfil | Auth | Atualiza perfil. |
| PUT | /api/perfil/email | Auth | Altera e-mail. |
| PUT | /api/perfil/senha | Auth | Altera senha. |
| POST | /api/perfil/upload | Auth | Upload de avatar/capa. |
| DELETE | /api/perfil | Auth | Deleta a própria conta. |
| GET | /api/perfil/{username} | Pública | Perfil público. Rate limit: 30/min. |
| GET | /api/usuarios | Admin | Lista todos os usuários. |
| GET | /api/usuario/{uuid} | Admin | Busca usuário por UUID. |
| PUT | /api/usuario/atualizar/{uuid} | Admin | Atualiza usuário. |
| DELETE | /api/usuario/deletar/{uuid} | Admin | Remove usuário. |
| PATCH | /api/usuario/{uuid}/ativar | Admin | Ativa usuário. |
| PATCH | /api/usuario/{uuid}/desativar | Admin | Desativa usuário. |