Este repositório contém uma prova de conceito de uma API para conversão monetária. A API é implementada em Node.js através do framework Express, com alguns outros detalhes de infraestrutura.
/api
: retorna, em JSON, a conversão de um valor em determinada moeda para outra. O único método deste endpoint é GET. É preciso passar os seguintes parâmetros:from
: código da moeda de origem;to
: código da moeda de destino;amount
: valor a ser convertido.
/currencies
: Utilizado para inserir e remover moedas do serviço de conversão. Métodos disponíveis:- GET: retorna todas as moedas suportadas;
- PUT: insere uma nova moeda através do parâmetro
currency
; - DELETE: remove a moeda passada pelo parâmetro
currency
.
O serviço pode ser executado de diversas maneiras: localmente, através de containers Docker e através do orquestrador Kubernetes (sobre containers Docker). Este repositório possui scripts para as duas últimas opções.
Supondo que a ferramenta Docker já está instalada em sua máquina, basta executar docker-compose up
.
Há três containers: um que propriamente executa o servidor em Node.js, outro que executa o data store Redis e outro que executa servidor NGINX como proxy reverso.
Com a finalidade de deixar o serviço mais escalável, é possível executá-lo dentro de um stack Docker (e posteriormente entre outras máquinas):
- Inicialize o swarm com
docker swarm init --advertise-addr=<endereco>
; - Faça o deploy do stack com
docker stack deploy --compose-file docker-compose.yml web
;
Supondo que o Kubernetes já está instalado em sua máquina (e.g. Minikube), basta executar:
sudo mkdir -p /k8s/nginx && sudo cp ../nginx.conf /k8s/nginx/nginx.conf
;cd k8s && sudo kubectl create -f .
Por conveniência, este repositório também fornece um arquivo para criar automaticamente uma máquina virtual com Vagrant de forma a instalar todos os pré-requisitos para executar o serviço em Kubernetes. Caso deseje utilizar este arquivo, basta instalar o Vagrant e executar vagrant up
. Os endpoints ficarão acessíveis no endereço 192.168.50.2
.
O serviço tem um modo de funcionamento muito simples. O NGINX mapeia solicitações para o servidor Node.js, que recebe solicitações de conversão e verifica se a taxa de conversão está disponível em um cache fornecido pelo Redis. Se a taxa está no cache, ela é recuperada e a operação de conversão é realizada. Caso contrário, a taxa e sua inversa são recuperadas de forma assíncrona de uma API externa e inseridas no cache, com tempo de expiração de uma hora.
Este é um exercício interessante de integração de tecnologias. Embora a prova de conceito desenvolvida obviamente não esteja pronta para produção, ela utiliza alguns elementos que são práticas comuns no mercado.