🧩 Exercícios: Middlewares e Tratamento de Exceções
Spec Backend Com Php E Laravel • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 04.1 — Middleware de Rota com $next($request)
Contexto: Middleware de Rota com $next($request) no contexto de Middlewares e Tratamento de Exceções.
Requisitos de Execução:
- Criar middleware
CheckApiVersionque insira o cabeçalhoX-Api-Version: 1.0na resposta.
Resultado Esperado
Header 'X-Api-Version: 1.0' injetado na resposta HTTP.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_1_SeuNome - Envie na tarefa:
Atividade Cap 04 - Middlewares e Tratamento de Exceções
🔑 Gabarito de Código & Solução Comentada
<?php
// app/Http/Middleware/CheckApiVersion.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CheckApiVersion
{
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
$response->headers->set('X-Api-Version', '1.0');
return $response;
}
}
🔍 Nível 2: Prática
Problema 04.2 — Registro de Middlewares Globais no bootstrap/app.php do Laravel 11
Contexto: Registro de Middlewares Globais no bootstrap/app.php do Laravel 11 no contexto de Middlewares e Tratamento de Exceções.
Requisitos de Execução:
- Configurar middlewares na nova estrutura unificada do Laravel 11.
Resultado Esperado
Middlewares registrados via closure no arquivo bootstrap/app.php.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_2_SeuNome - Envie na tarefa:
Atividade Cap 04 - Middlewares e Tratamento de Exceções
🔑 Gabarito de Código & Solução Comentada
<?php
// bootstrap/app.php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
$middleware->append(\App\Http\Middleware\CheckApiVersion::class);
})->create();
⚡ Nível 3: Integração
Problema 04.3 — Renderização Customizada de Exceções com withExceptions
Contexto: Renderização Customizada de Exceções com withExceptions no contexto de Middlewares e Tratamento de Exceções.
Requisitos de Execução:
- Tratar exceções
ModelNotFoundExceptionformatando JSON amigável com status 404.
Resultado Esperado
Exceção capturada globalmente: {'erro': 'Recurso não encontrado'}.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_3_SeuNome - Envie na tarefa:
Atividade Cap 04 - Middlewares e Tratamento de Exceções
🔑 Gabarito de Código & Solução Comentada
<?php
// bootstrap/app.php (Exceptions)
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Database\Eloquent\ModelNotFoundException;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (ModelNotFoundException $e) {
return response()->json(['erro' => 'Recurso não encontrado'], 404);
});
})
🏆 Nível 4: Desafio Corporativo
Problema 04.4 — Middleware de Manutenção com Bypass por IP e Token Secreto
Contexto: Middleware de Manutenção com Bypass por IP e Token Secreto no contexto de Middlewares e Tratamento de Exceções.
Requisitos de Execução:
- Criar middleware de manutenção que permita acesso apenas a IPs da equipe de DevOps.
Resultado Esperado
Bypass de manutenção concedido para IP 192.168.1.100.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_4_SeuNome - Envie na tarefa:
Atividade Cap 04 - Middlewares e Tratamento de Exceções
🔑 Gabarito de Código & Solução Comentada
<?php
// app/Http/Middleware/MaintenanceBypass.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class MaintenanceBypass
{
private array $allowedIps = ['192.168.1.100', '127.0.0.1'];
public function handle(Request $request, Closure $next)
{
if (app()->isDownForMaintenance() && !in_array($request->ip(), $this->allowedIps)) {
return response()->json(['erro' => 'Sistema em manutenção'], 503);
}
return $next($request);
}
}