Contrua uma API em NodeJS, que consultará o arquivo news.json e disponibilizará as seguintes rotas:
- Rota para Login, retornando o JWT que será utilizado nas requisições;
- Rota para Logout (rota autenticada com JWT);
- Rota para listar notícias (rota autenticada com JWT) no formato JSON;
- Rota para exibir o detalhe de uma notícia através do ID (rota autenticada com JWT) no formato JSON;
- Forkar esse desafio e criar o seu projeto (ou workspace) usando a sua versão desse repositório, tão logo acabe o desafio, submeta um pull request.
- O código precisa rodar em macOS ou Ubuntu (preferencialmente como container Docker)
- Para executar seu código, deve ser preciso apenas rodar os seguintes comandos:
- git clone $seu-fork
- cd $seu-fork
- comando para instalar dependências
- comando para executar a aplicação
- A API pode ser escrita com ou sem a ajuda de frameworks
- Se optar por usar um framework que resulte em boilerplate code, assinale no README qual pedaço de código foi escrito por você. Quanto mais código feito por você, mais conteúdo teremos para avaliar.
- A API precisa suportar um volume de 1000 requisições por segundo em um teste de estresse.
- Organização do código
- Clareza
- Assertividade
- Legibilidade do código
- Segurança
- Histórico de commits
- Escolhas técnicas
Para rodar o projeto é necessário ter o Docker instalado na sua máquina. Caso não tenha, acesse o site Docker e baixe a versão correspondente ao seu sistema.
Ápos ter instalado o Docker acesse a pasta do projeto e digite:
$ docker-compose up
Será baixado o Docker, instalado o seu projeto e iniciado o serviço, mas caso o serviço não seja iniciado automaticamente é só digitar o comando acima novamente que irá iniciar.
A API utiliza o NodeJS v10 ou superior.
Siga os passos abaixo para instalar e realizar o start da API:
- Acesse o diretório do projeto.
$ npm install
, para instalar todas as dependências.$ npm start
, para executar o projeto.- Será exibida a mensagem: API rodando na porta 3000 no terminal.
Seguem todas as rotas da API:
Rotas | Método | Descrição |
---|---|---|
http://localhots:3000/ |
GET | Rota incial de boas vindas. |
http://localhots:3000/api/login |
POST | Rota para se autenticar na API e gerar o token. Para se autenticar será necessário enviar um json no body com {email: [email protected], password: password}. Exemplo: { email: [email protected], password: bennuTv@2018 } |
http://localhots:3000/api/logout |
GET | Rota para realizar o logout, é necessário o token. |
http://localhots:3000/api/noticias |
GET | Rota para exibir todas as notícias, é necessário o token. |
http://localhots:3000/api/noticias/:id |
GET | Rota para exibir a notícia com base no id passado, é necessário o token. |
As dependência utilizadas na API são:
- body-parser
- express
- jsonwebtoken
- lodash
- underscore
Caso queira realizar um teste de carga, foi implementado o Artillery no projeto. Siga os passos abaixo para realizar o teste.
- Faça o login na API para recuperar o token.
- Abra o projeto e acesse o arquivo carga.yml que está dentro do diretório test.
- Cole o token em x-access-token e faça as configurações do seu teste neste arquivo.
- Faça o download da dependência Artillery no modo global:
$ npm install -g artillery
- Execute o comando
$ artillery run app/test/carga.yml
para realizar o teste.
Desenvolvido por Raphael Miquelis