O pipeline: validar → autenticar → tratar
Quando uma requisição chega à sua API, a ordem importa. Um handler robusto a processa sempre em três passos, e para assim que algo falha:
- Validar a entrada. Os dados obrigatórios vieram? Se não, responda 400 Bad Request e pare. Não faz sentido continuar com dados incompletos.
- Autenticar quem chama. Traz credenciais válidas (um cabeçalho de autorização, um token)? Se não, responda 401 Unauthorized e pare.
- Tratar a ação: já com dados bons e um usuário conhecido, execute a lógica (ler/criar/atualizar) e responda com sucesso, p. ex. 201 Created.
function tratarRequisicao(req, res, deps) {
// 1. validar -> 400 se faltar algo
// 2. autenticar -> 401 se não houver credenciais
// 3. tratar -> usa deps para fazer o trabalho e responde 201
}
Repare que validamos antes de autenticar: rejeitar entradas malformadas é
barato e não revela nada. As dependências (o banco de dados, o repo) são
injetadas por parâmetro (deps): assim o handler é fácil de testar com
mocks e não fica preso a uma implementação concreta.
Checklist de produção
"Funciona na minha máquina" não é estar pronto. Antes de abrir seu SaaS ao público, repasse uma lista mínima e inegociável:
- tests: a suíte passa no verde.
- secretos: chaves e senhas fora do código, em variáveis de ambiente.
- https: tráfego criptografado de ponta a ponta.
- logging: registros para saber o que aconteceu quando algo falhar.
- backups: cópias de segurança dos dados, testadas.
- monitoramento: alertas que avisam antes de o cliente perceber.
Se algo dessa lista faltar, não se lança. Você vai construir uma função
que toma o estado de cada item e diz se você está pronto e o que falta. E, como
cada ambiente precisa de ajustes diferentes (um BD local em dev, um
gerenciado em prod), você vai adicionar uma carregarConfig(env) que aplica
valores padrão.