Construa uma API, que responda JSON, para conversão monetária. Ela deve ter uma moeda de lastro (USD) e fazer conversões entre diferentes moedas com cotações de verdade e atuais.
A API deve converter entre as seguintes moedas:
-
USD
-
BRL
-
EUR
-
BTC
-
ETH
Ex: USD para BRL, USD para BTC, ETH para BRL, etc...
A requisição deve receber como parâmetros: A moeda de origem, o valor a ser convertido e a moeda final.
Ex: ?from=BTC&to=EUR&amount=123.45
Foi desenvolvida uma API em Node.JS, utilizando os frameworks: express, axios. Para buscar a cotação das moedas foi usada uma API externa desenvolvida pela Open Exchange Rates (https://openexchangerates.org/). Para usa-la é necessário uma chave de acesso. Essa chave já está disponível no arquivo .env.
A API da Open Exchange Rates só é atualizada de hora em hora.
Status | Mensagem | Descrição |
---|---|---|
400 | The to,from,amount parameters are required. | Quando está faltando algum parâmetro na query da requisição. |
401 | Invalid currency in parameter "to". | Quando a moeda contida no "to" é invalida |
401 | Invalid currency in parameter "from". | Quando a moeda contida no "from" é invalida |
401 | amount must be numeric. | Quando o valor contido no "amount" não é numérico |
Variáveis contidas no arquivo .env:
Variável | Descrição |
---|---|
PORT | Porta aonde vai rodar a API desenvolvida. |
OPENEXCHANGERATES_API | URL da API externa. |
KEY_API | Chave da API externa. |
A API desenvolvida tem apenas uma rota. Essa rota contém os seguintes parâmetros obrigatórios: from, to e amount. Seu retorno é em formato json.
url: http://localhost:3000/api/rates?from=EUR&to=BRL&amount=1 Resposta:
{
"from": "EUR",
"to": "BRL",
"amount": "1",
"result": "4.38"
}
- Clonar o projeto do repositório
git clone $seu-clone
- Acessar o projeto clonado
cd $clone
-
comando para instalar dependências
npm install
-
comando para executar a aplicação
npm start
- comando para buildar e executar a aplicação no Docker
docker-compose up -d
Para desenvolver os testes automatizados, foram utilizados os frameworks: mocha e supertest. E para o teste de estresse, foi utilizado o artillery. O teste de estresse foi elaborado para fazer 1000 requisições por segundo.
- Comando para rodar os testes
npm test
- Resultado
GET /api/rates √ respond with error in required parameters √ respond with invalid currency in parameter "to" √ respond with invalid currency in parameter "from" √ respond that the parameter "amount" must be numeric. √ respond to the converted currency. 5 passing (55ms)
- Comando para rodar o teste de estresse ( O servidor deve estar rodando)
npm run stress-test
- Resultado
Summary report @ 15:03:36(-0200) 2018-12-01 Scenarios launched: 1000 Scenarios completed: 1000 Requests completed: 1000 RPS sent: 65.83 Request latency: min: 461.7 max: 913.9 median: 502.5 p95: 625.1 p99: 796.1 Scenario counts: 0: 1000 (100%) Codes: 200: 1000
Boa sorte e boa viagem! ;)