A Blogs API é uma aplicação back-end full RESTful desenvolvida em Node.js para gerenciar a infraestrutura de conteúdo de uma plataforma de blogs. O núcleo do projeto foca em modelagem de dados relacionais, operações completas de CRUD de postagens e usuários, alinhado a um ecossistema seguro de autenticação.
Este projeto consolidou conceitos avançados de arquitetura de software, ORMs e segurança da informação:
- Arquitetura RESTful: Criação de endpoints estruturados sob as melhores práticas do protocolo HTTP, utilizando verbos adequados (
GET,POST,PUT,DELETE) e retornos semânticos de códigos de status (200 OK,201 Created,400 Bad Request,401 Unauthorized,409 Conflict). - Modelagem Relacional Avançada com Sequelize ORM:
- Tratamento de mapeamento objeto-relacional estruturando tabelas em
snake_casecom consumo emcamelCasevia JavaScript. - Implementação prática de relacionamentos 1:N (Um para Muitos) ligando
Usersa seus respectivosBlogPosts. - Implementação prática de relacionamentos complexos N:N (Muitos para Muitos) através de chaves primárias compostas na tabela associativa
PostCategories, permitindo vincular múltiplos posts a múltiplas categorias de forma performática.
- Tratamento de mapeamento objeto-relacional estruturando tabelas em
- Autenticação e Proteção com JWT (JSON Web Tokens):
- Desenvolvimento de rotas de login seguras gerando tokens com expiração baseados em variáveis criptográficas de ambiente (
JWT_SECRET). - Criação de Middlewares de Autenticação injetáveis para blindar rotas sensíveis contra acessos não autorizados.
- Desenvolvimento de rotas de login seguras gerando tokens com expiração baseados em variáveis criptográficas de ambiente (
- Containers e Ambientes de Testes:
- Isolamento do ecossistema de microsserviços do servidor e banco de dados via Docker Compose.
- Estruturação de bancos de dados voláteis separados (
*-testvs*-dev) garantindo a integridade dos dados durante testes automatizados com Jest.
A estrutura relacional da aplicação foi mapeada seguindo o seguinte padrão de entidades:
users: Armazena o cadastro dos escritores do blog. Cada e-mail é único.categories: Armazena as etiquetas/assuntos de categorização dos posts.blog_posts: Contém o texto e o título das postagens, amarrados a um autor específico via chave estrangeira (user_id).posts_categories: Tabela de junção (Join Table) que gerencia os relacionamentos N:N unindo chaves estrangeiras compostas depost_idecategory_id.
- Runtime Engine: Node.js (Versão 16)
- Framework Web: Express
- ORM / Banco de Dados: Sequelize CLI / MySQL 8
- Segurança: JSON Web Token (JWT)
- Análise Estática de Código: ESLint
- Testes Automatizados: Jest
A infraestrutura completa da API e do banco MySQL pode ser inicializada localmente com facilidade.
-
Clone o repositório:
git clone git@github.com:seu-usuario/sd-040-project-blogs-api.git cd sd-040-project-blogs-api -
Suba os containers do ecossistema:
docker-compose up -d --build
Isso criará os containers
blogs_api(Node) eblogs_api_db(MySQL) rodando em segundo plano. -
Acesse o terminal interativo do container da API:
docker exec -it blogs_api bash -
Instale as dependências e rode as Migrations (Dentro do container):
npm install npm start # O script prestart executará as migrations e seeds do Sequelize -
Acesse o servidor: A API estará ativa ouvindo requisições na porta local
http://localhost:3001.
Todas as rotas e validações de banco de dados contam com testes automatizados integrados.
- Para rodar todos os testes de integração:
npm test - Para validar as regras estritas de formatação de código (Linter):
npm run lint
O projeto adota uma arquitetura limpa dividindo as responsabilidades do ORM e das rotas:
src/
├── config/ # Configuração de credenciais do banco (config.js)
├── migrations/ # Histórico estrutural de criação das tabelas SQL
├── models/ # Entidades lógicas funcionais do Sequelize (User, BlogPost, etc.)
├── seeders/ # Dados fictícios iniciais para popular o ambiente
├── app.js # Orquestração de Middlewares e Rotas Express
└── server.js # Arquivo de inicialização e escuta da porta do servidor