A API foi criada utilizando as seguintes tecnologias:
- Java JDK 8
- Maven
- Jersey 2
- Lombok
- Slf4j (possui fácil integração com ferramentas de visualização como o Rapid7)
- Google Guice
- Dropwizard Metrics
- JDBI 3
- Jackson 2
- Mockito (JUnit Tests)
- Flyway (Controle de versão de Databases)
- MySql
- Tanto a API quanto o Flyway estão com a configuração padrão de acesso ao
MySQL
, que assume o usuário e senha:--user=root
--password=(branco)
Para rodara API local, será necessário possuir o Java 8
, Maven
e MySQL
instalados.
Para facilitar o uso, scripts foram criados com os comandos específicos para cada passo.
Primeiro passo: baixar todas as dependências do projeto.
mvnEclipse
rodar para baixar todas as dependências do projeto.
Segundo passo: criar o Banco de Dados no
MySQL
local.
updateDatabase
rodar parar executar o Flyway e atualizar a base de dados de acordo com os scripts existentes emsrc/main/resources/db/migration
. Importante lembrar que, esse script deve ser executado toda vez que um novo script.sql
for criado na API.
Terceiro passo: rodar a API
debug
rodar para executar a api localmente.
Para facilitar o teste desta API, um deploy realizado em container Docker foi criado. A única dependência para realizar este passo é possuir o Docker instalado localmente. Para facilitar o uso, scripts bash foram criados com os comandos específicos para cada passo.
Primeiro passo: criar o container. Este passo deve ser executado apenas em 2 ocasiões: na primeira vez em que o container for executado na máquina. Ou se o arquivo pom.xml dao projeto sofrer alteração.
builddocker
rodar para criar o container com todas as dependências necessárias.
Segundo passo: executar o container.
rundeploy
rodar para deployar o código dentro do container.
Em caso de sucesso, a mensagem Starting API
poderá ser vista no console, e a api ficará disponível através da url http://localhost:8080/base-api
Caso contrário, verifique no próprio console os erros encontrados no build.
Para realizar o deploy local da API, será necessário ter um Java Servlet instalado, Apache Tomcat, por exemplo.
Para executar o deploy basta executar o comando mvn clean package
na raiz do projeto.
Isso irá gerar um arquivo .war
na pasta target
do projeto.
Basta copiar e enviar para o Java Servlet instalado (Tomcat).
Importante: se houver alteração/criação de novos scripts
.sql
, lembre-se de executar o scriptupdateDatabase
também.
Em caso de sucesso, a API ficará disponível através da url configurada no seu Java Servlet. Na configuração padrão seria http://localhost:8080/base-api
Atualmente a API possui apenas um model do tipo Task
, com as seguintes propriedades:
id
(integer)name
(varchar 1024) (obrigatório)description
(varchar 1024) (obrigatório)assignedTo
(varchar 256) (obrigatório)status
(varchar 128) (obrigatório)- (possíveis valores: OPEN, PENDING, IN_PROGRESS, READY_TO_TEST, READY_TO_MERGE, COMPLETED)
created
(timestamp)updated
(timestamp)
Os endpoints de
POST
ePUT
esperam uma request com payload do tipoapplication/json
POST
/task
para criar uma nova Task.PUT
/task/{id}
para atualizar uma Task existente.DELETE
/task/{id}
para deletar uma Task existente.GET
/task/{id}
para buscar uma Task específica por ID.GET
/task
para buscar todas as Tasks existentes.PATCH
não implementado
GET
/metrics/metrics?pretty=true
GET
/metrics/healthcheck
GET
/metrics/threads
GET
/metrics/ping
Criando uma task:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"name":"Task1","description":"My description", "assignedTo": "Me", "status": "OPEN"}' \
http://localhost:8080/base-api/task
Atualizando uma task
curl --header "Content-Type: application/json" \
--request PUT \
--data '{name":"Task1","description":"My description", "assignedTo": "Me", "status": "COMPLETED"}' \
http://localhost:8080/base-api/task/1
Deletando uma task
curl --header "Content-Type: application/json" \
--request DELETE \
http://localhost:8080/base-api/task/1
Este projeto inicial não possui nenhuma segurança para controle de acesso (token ou login). Portanto, os endpoints podem ser acessados livremente.
O build está configurado para rodar os Testes Unitários, portanto, o build só terá sucesso se todos os testes estiverem corretos.