Aula 08 - Boas Práticas e Validação de Dados ✅
Objetivo
Objetivo: Aprender a garantir a integridade dos dados que entram no sistema, prevenir ataques comuns e escrever um código backend limpo, sustentável e fácil de manter.
1. Por que validar? 🛡️
O lema de todo desenvolvedor backend deve ser: "Nunca confie nos dados vindos do cliente". O frontend pode ter falhas ou alguém pode tentar burlar a interface e enviar dados maliciosos diretamente para a API.
Validar evita: * Dados Inconsistentes: Um produto sem preço ou um usuário sem e-mail. * Crashes: O servidor tentando processar algo que não existe. * Vulnerabilidades: Como nomes gigantes que quebram o layout ou scripts maliciosos.
2. Validação vs Sanitização 🧼
- Validação: Checar se o dado está correto (ex: "Isso é um e-mail válido?", "A idade é maior que 18?").
- Sanitização: Limpar o dado (ex: remover espaços em branco extras, remover tags HTML de um comentário).
3. Esquemas de Validação (Zod/Joi) 📐
Em vez de encher o Controller de if (campo == null), usamos bibliotecas de Schema Validation. Definimos um "contrato" e a biblioteca checa tudo para nós.
// Exemplo de esquema (Conceitual)
const usuarioSchema = {
nome: string().min(3),
email: string().email(),
idade: number().min(18)
};
4. Tratamento Global de Erros 🚨
Não devemos colocar try/catch em todas as funções. O ideal é ter um Middleware de Erro que captura qualquer falha inesperada e envia uma resposta padrão para o cliente.
Benefícios:
- O código fica limpo.
- As mensagens de erro para o cliente são amigáveis.
- Você pode logar o erro real no servidor para o time analisar sem expor detalhes sensíveis (como queries SQL) ao usuário final.
5. Clean Code: O Backend Elegante ✨
- Nomes Descritivos:
buscarUsuarioPorIdé melhor quegetUs. - Funções Pequenas: Se uma função faz 10 coisas, ela deve ser dividida.
- Princípio DRY: Don't Repeat Yourself (Não se repita). Se você usa o mesmo código em dois lugares, ele deve virar uma função ou utilitário.
🆚 Comparação: Clean Architecture no Mobile
Separar as regras de interface da lógica de validação é fundamental. O Clean Code é uma linguagem universal que separa o programador amador do profissional.
6. Mini-Projeto: O Validador de Produtos 🛒
Crie o esquema de validação para o cadastro de um Produto de E-commerce.
* nome: Obrigatório, mínimo 5 caracteres.
* preco: Obrigatório, deve ser maior que zero.
* estoque: Inteiro, não pode ser negativo.
* categoria: Deve ser uma das opções: 'Eletrônicos', 'Roupas' ou 'Alimentos'.
7. Exercício de Fixação 🧠
- Qual a diferença entre uma falha de validação (erro 400) e um erro inesperado no servidor (erro 500)?
- Por que sanitizar o texto de um comentário de usuário antes de salvá-lo no banco?
- O que acontece se uma API retornar detalhes técnicos do banco de dados (Stack Trace) em uma mensagem de erro para o cliente? (Dica: pense em segurança).
Próxima Aula: Entrando no Módulo 3! Segurança e Autenticação com JWT 🔐