Com o crescimento de aplicações modernas que consomem dados via HTTP, construir APIs RESTful robustas e escaláveis se tornou uma habilidade essencial. E quando falamos de desenvolvimento backend em JavaScript, o Express.js continua sendo uma das bibliotecas mais populares e versáteis.
Neste artigo, vamos apresentar melhores práticas para construir APIs RESTful com Express.js, abordando organização de código, segurança, validação de dados e muito mais.
1. Organize seu projeto em camadas
Evite colocar toda a lógica no mesmo arquivo. Separe a aplicação em camadas como:
- Rotas (
routes/
) - Controladores (
controllers/
) - Serviços ou lógica de negócio (
services/
) - Modelos de dados (
models/
) - Middlewares (
middlewares/
)
Exemplo de estrutura:
project/ ├── routes/ │ └── userRoutes.js ├── controllers/ │ └── userController.js ├── services/ │ └── userService.js ├── models/ │ └── userModel.js ├── middlewares/ │ └── authMiddleware.js └── app.js
2. Use middlewares de forma inteligente
Middlewares são o coração do Express. Use-os para tratar:
- Autenticação e autorização
- Logs de requisições
- Validação de dados
- Manipulação de erros
Exemplo:
javascript; app.use(express.json()); app.use(cors()); app.use(authMiddleware);
3. Valide os dados da requisição
Jamais confie nos dados que chegam via req.body
, req.params
ou req.query
.
Utilize bibliotecas como Joi, Zod ou express-validator para garantir que os dados estão corretos antes de prosseguir.
Exemplo com express-validator:
javascript; const { body } = require("express-validator"); router.post( "/users", [body("email").isEmail(), body("password").isLength({ min: 6 })], userController.createUser );
4. Padronize os códigos de status HTTP
Use códigos de status corretamente para que o cliente saiba o que está acontecendo:
200 OK
– requisição bem-sucedida201 Created
– recurso criado com sucesso400 Bad Request
– dados inválidos401 Unauthorized
– sem autenticação403 Forbidden
– sem permissão404 Not Found
– recurso não encontrado500 Internal Server Error
– erro inesperado
5. Trate erros de forma centralizada
Crie um middleware de erro que capture exceções e envie respostas consistentes.
Exemplo:
javascript; app.use((err, req, res, next) => { console.error(err.stack); res.status(err.status || 500).json({ message: err.message || "Erro interno do servidor", }); });
6. Implemente autenticação com JWT
Para proteger rotas, use tokens JWT (JSON Web Tokens) em conjunto com um middleware de autenticação.
Exemplo simples de middleware:
javascript; const jwt = require("jsonwebtoken"); function authMiddleware(req, res, next) { const token = req.headers.authorization?.split(" ")[1]; if (!token) return res.status(401).json({ message: "Token ausente" }); try { const decoded = jwt.verify(token, process.env.JWT_SECRET); req.user = decoded; next(); } catch { res.status(403).json({ message: "Token inválido" }); } }
7. Utilize variáveis de ambiente
Nunca exponha credenciais no código. Use bibliotecas como dotenv
para gerenciar variáveis de ambiente:
javascript; require("dotenv").config(); const port = process.env.PORT || 3000;
8. Documente sua API
Uma API bem documentada facilita a vida de quem consome seus endpoints. Use Swagger (OpenAPI) para gerar documentação interativa.
- Ferramenta recomendada:
swagger-ui-express
Conclusão
Construir APIs RESTful com Express.js pode ser simples, mas garantir que elas sejam escaláveis, seguras e manuteníveis exige boas práticas. Ao seguir uma arquitetura bem definida, validar dados, proteger suas rotas e tratar erros corretamente, você cria um backend robusto e profissional.
Se você quer levar suas APIs a um próximo nível, considere também implementar testes automatizados, versionamento de rotas e cache de respostas.