https://github.com/michaelcaxias/blogs-api
API Restful de um Blog com NodeJs, Express, Sequelize e JWT com o banco de dados MySQL utilizando a estrutura ORM e MSC.
https://github.com/michaelcaxias/blogs-api
api crud jwt msc mysql nodejs sequelize
Last synced: about 2 months ago
JSON representation
API Restful de um Blog com NodeJs, Express, Sequelize e JWT com o banco de dados MySQL utilizando a estrutura ORM e MSC.
- Host: GitHub
- URL: https://github.com/michaelcaxias/blogs-api
- Owner: michaelcaxias
- Created: 2022-02-14T23:30:09.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-03-13T19:08:28.000Z (over 4 years ago)
- Last Synced: 2025-11-12T16:24:55.711Z (8 months ago)
- Topics: api, crud, jwt, msc, mysql, nodejs, sequelize
- Language: JavaScript
- Homepage:
- Size: 2.72 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

# Blogs API
Projeto feito no curso [Trybe](betrybe.com) com objetivo de criar um [CRUD](https://developer.mozilla.org/pt-BR/docs/Glossary/CRUD) a partir da criação de uma API RESTful utilizando as estruturas ORM e MSC.
## ⭐ Habilidades
- Utilizar as habilidades de associação do MySQL.
- Criar uma API utilizando o Sequelize e NodeJs.
- Validar e criptografar tokens de autenticação com o [JWT](https://jwt.io/).
- Realizar validações com o [Joi](https://joi.dev/api/).
## 💻 Como iniciar
1. Faça o clone do projeto
2. Entre no Visual Studio Code
3. Instale as dependências
```shell
npm install
```
4. Inicie a aplicação
```shell
npm run debug
```
# 💡 Documentação da API
## Cadastra um usuário
```http
POST /user
```
| Corpo da requisição | Tipo | Descrição |
| :---------- | :--------- | :---------------------------------- |
| `displayName, email, password, image` | `json` | **Obrigatório**. Todos os campos do corpo da requisição |
**Formato do corpo da requisição**
```json
{
"displayName": "Nome da Pessoa",
"email": "emaildapessoa@email.com",
"password": "123456",
"image": "http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/imagem.png"
}
```
**Retorno em caso de sucesso**
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
```
> O retorno acima é apenas fictício
## Retorna todos os usuários
```http
GET /user/
```
**⚠️ Para fazer uma requisição é necessário estar com a chave `Authentication` com o token JWT recebido anteriormente**
**Retorno em caso de sucesso**
```json
[
{
"id": "401465483996",
"displayName": "Brett Wiltshire",
"email": "brett@email.com",
"image": "http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png"
}
]
```
| Descrição |
| :--------- |
| Será retornado um array com todos os usuários do banco de dados |
### Retorna um usuário
```http
GET /user/${id}
```
**⚠️ Para fazer uma requisição é necessário estar com a chave `Authentication` com o token JWT recebido anteriormente**
| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| `id` | `string` | **Obrigatório**. O ID do usuário que você quer |
**Retorno em caso de sucesso**
```json
{
"id": "401465483996",
"displayName": "Brett Wiltshire",
"email": "brett@email.com",
"image": "http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png"
}
```
| Descrição |
| :--------- |
| Será retornado o usuário com o id especificado |
### Logar de acordo com o banco de dados
```http
POST /login
```
| Corpo da requisição | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| `email, password` | `json` | **Obrigatório**. Todos os campos do Corpo da requisição devem existir no banco de dados |
**Formato do corpo da requisição**
```json
{
"email": "email@mail.com",
"password": "123456"
}
```
**Retorno em caso de sucesso**
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
```
> O retorno acima é apenas fictício
## Cadastra uma nova categoria
```http
POST /categories
```
| Corpo da requisição | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| `name` | `json` | **Obrigatório**. O nome da categoria deve ser obrigatório |
**⚠️ Para fazer uma requisição é necessário estar com a chave `Authentication` com o token JWT recebido anteriormente**
**Formato do corpo da requisição**
```json
{
"name": "Ação"
}
```
**Retorno em caso de sucesso**
```json
{
"id": 1
"name": "Ação"
}
```
## Retorna todas as categorias
```http
GET /categories
```
**⚠️ Para fazer uma requisição é necessário estar com a chave `Authentication` com o token JWT recebido anteriormente**
**Retorno em caso de sucesso**
```json
[
{
"id": 1,
"name": "Escola"
},
{
"id": 2,
"name": "Inovação"
}
]
```
| Descrição |
| :--------- |
| Será retornado todas as categorias do Banco de Dados |
### Cadastra uma nova publicação
```http
POST /post
```
| Corpo da requisição | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| `title, content, categoryIds` | json | **Obrigatório**. Todos os campos devem ser obrigatórios |
**⚠️ Para fazer uma requisição é necessário estar com a chave `Authentication` com o token JWT recebido anteriormente**
**Formato do corpo da requisição**
```json
{
"title": "Titulo da publicação",
"content": "Conteudo da publicação aqui",
"categoryIds": [1, 2] //id das categorias criadas anteiormente, deve ser somente um array.
}
```
**Retorno em caso de sucesso**
```json
{
"id": "$id da publicação",
"userId": 1, // usuário autenticado
"title": "Titulo da publicação",
"content": "Conteudo da publicação aqui"
}
```
## Retorna todos as publicações
```http
GET /categories
```
**⚠️ Para fazer uma requisição é necessário estar com a chave `Authentication` com o token JWT recebido anteriormente**
**Retorno em caso de sucesso**
```json
[
{
"id": 1,
"title": "Post do Ano",
"content": "Melhor post do ano",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2017_Malaysia.jpg"
},
"categories": [
{
"id": 1,
"name": "Inovação"
}
]
}
]
```
| Descrição |
| :--------- |
| Será retornado todas as publicações do Banco de Dados, com sua categoria e o autor |
## Feito Com:
[](https://code.visualstudio.com/)
[](https://nodejs.org/en/)
[](https://sequelize.org/master/)
[](https://www.mysql.com/)
### Contato
[](https://www.linkedin.com/in/michaelcaxias/)
Copyright © 2021 Michael Caxias