Esta API tem como objetivo analisar as requisições, durante 10 minutos, requisições com o mesmo corpo serão negadas pela API.
Serve principalmente para aliviar o peso de uma banco de dados, ja que, a requisição não ira proceder para o banco de dados e sim parar no servidor.
# 2020-09-01T16:00:00 - Durante 10 minutos requests com o mesmo corpo serão negadas
curl -XPOST http://54.232.45.139:3000/v1/products -d '[{"id": "123", "name": "mesa"}]' #=> 200 OK
# 2020-09-01T16:05:00 - Como é o mesmo corpo de uma requisição passada, a API ira negar.
curl -XPOST http://54.232.45.139:3000/v1/products -d '[{"id": "123", "name": "mesa"}]' #=> 403 Forbidden
# 2020-09-01T16:10:00 - Depois de 10 minutos, a API aceita a requisição.
curl -XPOST http://54.232.45.139:3000/v1/products -d '[{"id": "123", "name": "mesa"}]' #=> 200 OK
Verifique se você tem os programas Docker, Docker Compose e GIT
Faça um clone do projeto no GitHub.
-
Crie uma pasta para o projeto com o comando
mkdir projeto_git
-
Acesse esta pasta com o comando
cd projeto_git
-
Utilize o comando
git clone https://github.com/cafesao/api_produtos_desafio.git
-
Acesse a pasta api_produtos_desafio com o comando
cd api_produtos_desafio
-
Comando resumido:
mkdir projeto_git && cd projeto_git && git clone https://github.com/cafesao/api_produtos_desafio.git && cd api_produtos_desafio
Agora vamos iniciar o docker-compose.
- Na pasta api_produtos_desafio insira o comando
sudo docker-compose build
- Depois vamos subir os containers com o comando
sudo docker-compose up
Agora você esta com o servidor rodando na sua maquiná local. Para fazer as requisições utilize o tutorial acima Como testar - Modo rápido e apenas substitua a URL para localhost:3000
Você pode testar as funcionalidades da API com o Jest.
Para isso, acesse a pasta do projeto e coloque o comando yarn jest
Com isso, você terá algo parecido com isso:
Lembre-se, caso esteja testando na sua maquina local, mude a constante URL
dentro do arquivo de teste para localhost:3000/v1/products.
Apenas uma observação, caso o Jest esteja informando que o segundo teste não passou, é provavelmente por que o Jest esta tentando fazer uma requisição que ja foi feita a 10 minutos atrás, sendo assim, apenas acesse o arquivo de teste e edite a constante body
e rode os teste de novo.
A API quando recebe uma requisição ela verifica junto ao um banco de dados Redis se esta requisição foi feita a 10 minutos atrás. Caso ela ja tenha sido feita, a API nega o pedido. Se não, a API salva o hash desta requisição no Redis e retorna um código 200
Sendo assim, o funcionamento da API consiste em nada mais do que, quando receber o corpo da requisição, criar um hash md5 e verificar se existe ou não no Redis.
- express : Criar toda a parte do conexão e exposição da API
- dotenv : Configurar as variáveis de ambiente
- cors : Aceitar conexão externa de um Front-End
- redis : Configurar e iniciar o banco de dados Redis