Um pequeno projeto para testar suas habilidades como programador.
- Clone este repositório
- Em seu fork, atenda os casos de usos especificados e se desejar também os bonus points
- Envio um e-mail para [email protected] com a seu Nome e endereço do repositorio.
O projeto consiste em reproduzir um encurtador de URL's (apenas sua API), simples e com poucas funções, porém com espaço suficiente para mostrar toda a gama de desenho de soluções, escolha de componentes, mapeamento ORM, uso de bibliotecas de terceiros, uso de GIT e criatividade.
O projeto consiste de dois casos de uso:
- Shorten URL
- Retrieve URL
-
Usuario chama a API passando a URL que deseja encurtar e um parametro opcional CUSTOM_ALIAS
- Caso o CUSTOM_ALIAS já exista, um erro especifico
{ERR_CODE: 001, Description:CUSTOM ALIAS ALREADY EXISTS}
deve ser retornado. - Toda URL criada sem um CUSTOM_ALIAS deve ser reduzida a um novo alias, você deve sugerir um algoritmo para isto e o porquê.
- Caso o CUSTOM_ALIAS já exista, um erro especifico
-
O Registro é colocado em um repositório (Data Store)
-
É retornado para o cliente um resultado que contenha a URL encurtada e outros detalhes como
- Quanto tempo a operação levou
- URL Original
Exemplos (Você não precisa seguir este formato):
- Chamada sem CUSTOM_ALIAS
PUT http://shortener/create?url=http://www.vale.com.br
{
"alias": "XYhakp",
"url": "http://shortener/u/XYhakp",
"statistics": {
"time_taken": "10ms",
}
}
- Chamada com CUSTOM_ALIAS
PUT http://shortener/create?url=http://www.vale.com.br&CUSTOM_ALIAS=vale
{
"alias": "vale",
"url": "http://shortener/u/vale",
"statistics": {
"time_taken": "12ms",
}
}
- Chamada com CUSTOM_ALIAS que já existe
PUT http://shortener/create?url=http://www.github.com&CUSTOM_ALIAS=vale
{
"alias": "vale",
"err_code": "001",
"description": "CUSTOM ALIAS ALREADY EXISTS"
}
- Usuario chama a API passando a URL que deseja acessar
- Caso a URL não exista, um erro especifico
{ERR_CODE: 002, Description:SHORTENED URL NOT FOUND}
deve ser retornado.
- Caso a URL não exista, um erro especifico
- O Registro é lido de um repositório (Data Store)
- Esta tupla ou registro é mapeado para uma entidade de seu projeto
- É retornado para o cliente um resultado que contenha a URL final, a qual ele deve ser redirecionado automaticamente
Não há requerimentos específicos para linguagens, somos poliglotas. Utilize a linguagem que você se sente mais confortável.
- Crie testcases para todas as funcionalidades criadas
- Crie um endpoint que mostre as dez URL's mais acessadas
- Crie um client para chamar sua API
- Faça um diagrama de sequencia da implementação feita nos casos de uso (Dica, use o https://www.websequencediagrams.com/)
- Monte um deploy da sua solução utilizando containers
- Monte uma estrategia para analise dos logs em series de tempo
- Crie sua infra de forma automatica (https://www.chef.io/ , https://www.ansible.com/ https://www.terraform.io/)