Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/isaque-s-0liveira/blogs-api-be
Este projeto consiste no desenvolvimento de uma API RESTful para gerenciar um blog, utilizando Node.js e o ORM Sequelize para a interação com o banco de dados MySQL.
https://github.com/isaque-s-0liveira/blogs-api-be
express joi jwt-jsonwebtoken mysql sequelize
Last synced: about 1 month ago
JSON representation
Este projeto consiste no desenvolvimento de uma API RESTful para gerenciar um blog, utilizando Node.js e o ORM Sequelize para a interação com o banco de dados MySQL.
- Host: GitHub
- URL: https://github.com/isaque-s-0liveira/blogs-api-be
- Owner: isaque-S-0liveira
- Created: 2023-12-06T22:51:28.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-08T20:54:39.000Z (3 months ago)
- Last Synced: 2024-09-08T21:36:11.589Z (3 months ago)
- Topics: express, joi, jwt-jsonwebtoken, mysql, sequelize
- Language: JavaScript
- Homepage:
- Size: 285 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Blogs api
## Contexto
O foco principal deste projeto é, com base nos ensinamentos da **Trybe**, desenvolver uma **API** e um **banco de dados** para a produção de conteúdo de um blog. O objetivo é criar uma aplicação utilizando **Node.js** e o pacote **Sequelize** para gerenciar as operações de **CRUD** (Create, Read, Update e Delete) de posts e usuários, seguindo os princípios de uma API **RESTful**.
O que é a Trybe?🤔
A Trybe é uma escola de desenvolvimento web genuinamente comprometida com o sucesso profissional de seus estudantes. Com o Modelo de Sucesso Compartilhado (MSC) oferecido pela Trybe Fintech, uma instituição financeira autorizada pelo Banco Central do Brasil, os alunos têm a opção de pagar apenas quando estiverem trabalhando.🎲 Diagrama ER
Objetivos do Projeto:
1. **Desenvolver uma API RESTful**:
- A API foi desenvolvida para gerenciar um blog, permitindo a criação, leitura, atualização e exclusão de posts e usuários.
- Cada post deve estar associado a um usuário, e categorias podem ser vinculadas aos posts, criando uma relação entre **users**, **posts**, e **categories**.
- A autenticação é implementada por meio de **tokens**, sendo necessário login para realizar operações específicas.2. **Migrations e Models**:
- Utilizando o **Sequelize**, foram criadas **migrations** para estruturar o banco de dados e gerar as tabelas necessárias, como `users`, `categories`, `blog_posts`, e `posts_categories`.
- As models foram configuradas para refletir corretamente o diagrama de **Entidade-Relacionamento (ER)**, garantindo que as operações de banco de dados sigam as regras estabelecidas.3. **Autenticação e Validação**:
- A aplicação requer autenticação para acessar determinados endpoints, garantindo que apenas usuários autenticados possam criar, atualizar ou excluir posts.
- A validação de token é implementada por **middlewares**, que são responsáveis por verificar a validade dos tokens nas requisições.4. **Relacionamentos e Categorias**:
- O projeto explora as relações entre **posts** e **categorias**, permitindo que os posts sejam vinculados a múltiplas categorias.
- Essas relações são tratadas através de associações no Sequelize, utilizando relações de **1:N** e **N:N**.
Funcionalidades Implementadas:
- **Users**:
- **POST /login**: Endpoint para login de usuários, retornando um token de autenticação.
- **POST /user**: Cadastro de novos usuários.
- **GET /user**: Listagem de todos os usuários (requer token).
- **GET /user/:id**: Exibe detalhes de um usuário específico (requer token).- **Categories**:
- **POST /categories**: Cadastro de novas categorias (requer token).
- **GET /categories**: Listagem de todas as categorias (requer token).- **Posts**:
- **POST /post**: Criação de novos posts vinculados a usuários e categorias (requer token).
- **GET /post**: Listagem de todos os posts, com suas respectivas categorias e autores (requer token).
- **GET /post/:id**: Exibição de um post específico pelo ID (requer token).
- **PUT /post/:id**: Atualização de posts (somente pelo autor, requer token).
- **DELETE /post/:id**: Exclusão de posts (somente pelo autor, requer token).
- **GET /post/search?q=:searchTerm**: Busca por posts com base no termo fornecido (requer token).
Habilidades Desenvolvidas:
- **Node.js** e **Sequelize**: Utilização do ORM Sequelize para manipulação do banco de dados MySQL, abstraindo operações SQL e facilitando a integração com a API.
- **Arquitetura RESTful**: Desenvolvimento de uma API organizada em camadas, seguindo os princípios REST para a estruturação de endpoints e recursos.
- **Autenticação com JWT**: Implementação de autenticação por meio de tokens JWT para garantir a segurança de endpoints privados.
- **Migrations e Models**: Criação de models e migrations no Sequelize, respeitando o diagrama de Entidade-Relacionamento (ER).
- **Validação de Dados**: Implementação de validações em diversos endpoints, como o cadastro de usuários e posts, garantindo a integridade dos dados.
- **Relações entre Tabelas**: Exploração das associações de **1:N** e **N:N** entre `users`, `posts` e `categories` no banco de dados.
- **Middlewares**: Uso de middlewares para autenticação e validação de dados antes da execução de operações críticas.Este projeto oferece uma visão completa da criação de uma aplicação backend moderna, com funcionalidades robustas de gerenciamento de conteúdo, autenticação e integração com um banco de dados relacional.
## Tecnologias Usadas
- [Node.js](https://nodejs.org/) - Plataforma de execução de JavaScript no servidor.
- [Express](https://expressjs.com/) - Framework para Node.js que facilita a criação de APIs e gerenciamento de rotas.
- [Sequelize](https://sequelize.org/) - ORM (Object-Relational Mapping) para Node.js, utilizado para interagir com o banco de dados MySQL.
- [MySQL](https://www.mysql.com/) - Banco de dados relacional utilizado para armazenar as informações de usuários, posts e categorias.
- [Joi](https://joi.dev/) - Biblioteca para validação de dados no backend.
- [JWT (JSON Web Token)](https://jwt.io/) - Utilizado para autenticação e geração de tokens de segurança.