Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 6 days 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 2 years ago)
- Default Branch: master
- Last Pushed: 2022-03-13T19:08:28.000Z (over 2 years ago)
- Last Synced: 2023-03-04T01:14:42.254Z (over 1 year 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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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 protected]",
"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": "[email protected]",
"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:
[![IDE](https://img.shields.io/badge/Visual_studio_code-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white)](https://code.visualstudio.com/)
[![NODEJS](https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)](https://nodejs.org/en/)
[![SEQUELIZE](https://img.shields.io/badge/Sequelize-52B0E7?style=for-the-badge&logo=Sequelize&logoColor=white)](https://sequelize.org/master/)
[![MYSQL](https://img.shields.io/badge/MySQL-005C84?style=for-the-badge&logo=mysql&logoColor=white)](https://www.mysql.com/)### Contato
[![Linkedin](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/michaelcaxias/)
Copyright © 2021 Michael Caxias