An open API service indexing awesome lists of open source software.

https://github.com/trkotovicz/blogs-api

O Blogs API é uma ma API REST para a produção de conteúdo de um blog, onde você pode fazer um CRUD de posts, categorias e usuários.
https://github.com/trkotovicz/blogs-api

api api-rest docker express javascript joi jwt-authentication msc-project mysql nodejs sequelize-orm

Last synced: 2 months ago
JSON representation

O Blogs API é uma ma API REST para a produção de conteúdo de um blog, onde você pode fazer um CRUD de posts, categorias e usuários.

Awesome Lists containing this project

README

          

# Blogs API

O Blogs API é uma ma API REST e um banco de dados para a produção de conteúdo para um blog, onde você pode fazer requisições HTTP para criar, consultar, atualizar e deletar posts, categorias e usuários de um blog. Tem autenticação de usuário, com JWT (Json Web Token), e você só pode alterar um post que você mesmo criou.
Ele foi desenvolvido em JS, utilizando o banco de dados MySQL, com Express e o ORM Sequelize. Utiliza a arquitetura de camadas MSC (**M**odell-**S**ervice-**C**ontroller).

## Inicialização via Docker 🐳

1. Clone o repositório `git@github.com:trkotovicz/blogs-api.git`
2. Na raíz do repositório rode o comando `docker-compose up -d`
3. Entre o terminal do container criado `docker exec -it blogs_api bash`
4. Instale as dependências do projeto com `npm install`
5. Inicie a aplicação dentro do container `npm start`

O servidor vai estar rodando na porta local 3000 (http://localhost:3000).
Utilize o cliente de requisições HTTP de sua preferência para fazer as requisições.

# Rotas

⚠️ Alguns endpoints vão precisar de uma autenticação prévia, para que seja possível consumir o endpoint.
Seu token vai ser gerado com a ferramenta JWT ao realizar o login ou cadastrar um novo usuário.

### POST `/login`

O endpoint recebe no corpo da requisição os campos `email` e `password` e retorna um token aleatório de 16 caracteres.
A requisição deve ter o body com um email e uma senha válidos. Exemplo:
```json
{
"email": "usuario@email.com",
"password": "123456",
}
```
`http://localhost:3000/login`

---

### POST `/user`

Nessa rota o usuário pode cadastrar um novo usuário. A requisição valida o login através do token gerado.
O corpo da requisição deve ter o seguinte formato:
```json
{
"displayName": "Bruce Wayne",
"email": "bruce@wayneenterprises.com",
"password": "batman"
"image": "https://cdn.icon-icons.com/icons2/1736/PNG/512/4043232-avatar-batman-comics-hero_113278.png"
}
```
`http://localhost:3000/user`

---

## ⚠️ Autenticação de usuário

As rotas abaixo irão utilizar o token de validação gerado no login.
Para isso, adicione o token de autenticação no `Headers` do seu cliente de requisições, na chave `Authorization`.

---

### GET `/user`

Essa rota lista todos os usuários cadastrados.

`http://localhost:3000/user`

---

### GET `/user/:id`

Essa rota exibe um usuário com base no id do endpoint.
Para isso, substitua no endpoint o `:id` pelo id de usuário que você deseja buscar (o id deve ser um número inteiro).

`http://localhost:3000/user/:id`

---

### GET `/categories`

Essa rota exibe a lista de categorias cadastradas.

`http://localhost:3000/categories`

---

### DELETE `/user/me`

Nessa rota o usuário pode deletar sua conta.
É verificado através do token o usuário logado e então ele é excluído da base de dados.

`http://localhost:3000/user/me`

---

### POST `/categories`

Nessa rota o usuário pode cadastrar uma nova categoria de post.
O corpo da requisição deve ter o seguinte formato:
```json
{
"name": "Nova categoria"
}
```
`http://localhost:3000/user`

---

### GET `/post`

Essa rota exibe todos os posts do blog.

`http://localhost:3000/post`

---

### GET `/post/:id`

Essa rota exibe um um post com base no id do endpoint.
Para isso, substitua no endpoint o `:id` pelo id do post que você deseja buscar (o id deve ser um número inteiro).

`http://localhost:3000/post/:id`

---

### POST `/post`

O endpoint permite o usuário criar um novo post.
O corpo da requisição deve ter um título, o conteúdo do post e os ids das categorias do post. Exemplo:
```json
{
"title": "Novo post no blog",
"content": "Um conteúdo bem legal aqui",
"categoryIds": [1]
}
```
`http://localhost:3000/post`

---

### PUT `/post/:id`

Nessa rota o usuário pode alterar um post publicado por ele.
É verificado se o usuário autor do post é o mesmo usuário logado, caso seja, o post é alterado com sucesso.
Para isso, substitua no endpoint o `:id` pelo id do post que você deseja alterar (o id deve ser um número inteiro).

`http://localhost:3000/post/:id`

---

### DELETE `/post/:id`

Nessa rota o usuário pode excluir uma publicação feita por ele.
É verificado se o usuário autor do post é o mesmo usuário logado, caso seja, o post é excluído com sucesso.
Para isso, substitua no endpoint o `:id` pelo id do post que você deseja alterar (o id deve ser um número inteiro).

`http://localhost:3000/post/:id`

---

### GET `/post/search`

Essa rota é reponsável por buscar posts através de palavras chaves ou frases.
Para isso, adicione uma chave com o valor `q` no campo `Query` do seu cliente de requisições HTTP, em seguida adicione o valor que você deseja buscar nos posts.
Caso nenhum valor seja passado, ele retornará todos os posts do blog.

`http://localhost:3000/post/search`

---

Projeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).