📊 Capítulo 11: Eloquent API Resources
Especialização Backend com PHP & Laravel
🗺️ A Camada de Transformação de DTOs e Resources
flowchart LR
MODEL["Eloquent Model ($produto)"]
--> RESOURCE["ProdutoResource::make($produto)"]
--> FILTER["toArray(): Seleciona campos autorizados e renomeia chaves"]
--> CONDITIONAL["$this->whenLoaded('categoria', fn() => ...)\n(Evita carregar relações não buscadas!)"]
--> JSON["Resposta JSON Formatada para o Frontend"]
style MODEL fill:#ede7f6,stroke:#512da8,stroke-width:2px
style RESOURCE fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style FILTER fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px
style CONDITIONAL fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
style JSON fill:#c8e6c9,stroke:#2e7d32,stroke-width:1.5px
🎯 Slide 1: Por Que Usar API Resources?
-
Desacoplamento do Banco: Se o nome de uma coluna mudar no banco (
nm_produto$\to$nome), você ajusta apenas o Resource sem quebrar o contrato com o Frontend/Mobile. - Ocultação de Dados Sensíveis: Evita expor senhas, chaves de API e timestamps internos acidentalmente.
🎯 Slide 2: Inclusão Condicional com whenLoaded
class PedidoResource extends JsonResource {
public function toArray(Request $request): array {
return [
'id' => $this->id,
'total' => (float) $this->total,
'criado_em' => $this->created_at->toIso8601String(),
// Inclui itens APENAS se foram carregados com with('itens')!
'itens' => ItemResource::collection($this->whenLoaded('itens')),
];
}
}
🎯 Slide 3: Paginação Automática com Metadados
return ProdutoResource::collection(Produto::paginate(20));
- Gera automaticamente os objetos
data,links(next, prev) emeta(current_page, total, per_page) no formato padrão da indústria!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim