O objetivo deste projeto é criar uma API rest que armazenará dados como nome de um planeta, clima e terreno. Retornando também a quantidade de aparições de cada planeta nos filmes de Star Wars registrada na API SWAPI. Esse projeto será consumido por um jogo criado pela B2W que aproveitará das informações da franquia.
Para o presente projeto foi utilizado a linguagem Java na sua versão 8, Spring Boot 2.0 e a IDE Eclipse modificada para o framework Spring Boot(Spring Tools Suite). Para a persistência dos dados foi utilizado o banco de dados não relacional MongoDB e para testes da api o Postman junto com o framework JUNIT.
Para utilizar o projeto deverá ser instalado o Java SDK 8, o Eclipse, preferencialmente modificado para o Spring Boot(Spring Tools Suite) e o MongoDB Community Server baseado em seu sistema operacional. Após isso Efetuar o download do projeto e inserir o mesmo no diretorio raiz do seu workspace do Eclipse.
Primeiramente instalar o Apache Maven e setar suas variaveis de ambiente corretamente, acessar a pasta raiz do projeto pelo prompt, executar o comando "mvn package", aguardar baixar as dependências, aguardar executar os testes automatizados e ao terminar de buildar o projeto acessar na pasta raiz a pasta "target" lá estará o jar responsavel pela api, basta executa-lo junto com o mongodb que a api estará rodando em segundo plano, utilize o postman para fazer testes mais facilmente.
Após importar o projeto, executar o mongoDB e dar Run em Spring Boot App no Eclipse. Pronto, a API já estará funcionando se o SWAPI estiver online, caso contrário a API retornará um erro 503 indicando que o SWAPI está fora do ar.
Obs1: A propria API gera automaticamente o banco vazio no MongoDB caso não exista. Obs2: Se ocorrer algum problema da porta default, você poderá entrar em application.properties e mudar server.port para alguma outra porta que desejar. Obs3: Para finalizar a execução do projeto buildado no maven abra o prompt, digite o comando "netstat -a -n -o" procure o processo que está utilizando a porta que você configurou ex: "8080", pegue sua Pid e digite "taskkill -f -im "NÚMERO DO PID"".
Com o Eclipse aberto, ir em src/test/Java e rodar o projeto com JUNIT, o sistema efetuará alguns testes de integração e alguns testes unitários, retornando verde se tudo deu certo ou vermelho se algo deu errado.(Normalmente quando você builda o projeto com mvn package ele já efetua os testes sozinho)
Vejamos algumas funcionalidades da API, os exemplos estão considerando a porta padrão 8080:
Para inserir um planeta deve ser feita uma requisição post em json para o endpoint "/planetas".
Ex: http://localhost:8080/planetas
{
"nome": "Yavin IV",
"clima": "Frio",
"terreno": "jungle, rainforests"
}
Será criado um novo planeta no banco de dados ao qual a ID será gerada automaticamente, não importando se o usuário setar uma id na hora da inserção. Se for inserido um nome, clima ou terreno com caractere vazio ou null na API, ela retornara o erro 400 de requisição inválida.
Um planeta que não apareceu nos filmes também pode ser criado, porém seu numero de aparições será automaticamente 0.
Para listar todos os planetas basta fazer uma solicitação get para o endpoint "/planetas".
Ex: http://localhost:8080/planetas
Será retornado a id dos planetas, seu nome, seu clima, terreno e aparições em filmes no formato json. As aparições dos planetas são atualizadas a cada solicitação get, para caso haja alguma alteração no banco de dados do SWAPI ele retorne as aparições atualizadas.
Para fazer uma busca por id você deverá fazer uma solicitação get para o endpoint "/planetas/" junto com a id que você quer pesquisar.
Ex: http://localhost:8080/planetas/5afcf2bf1d5bad0100e51bda
Caso seja inserida uma id inválida, será retornado o erro 404 não encontrado.
Para fazer uma busca por nome você deverá fazer uma solicitação get para o endpoint "/planetas/buscanome?nome=" junto com o nome codificado que você quer pesquisar.
Para codificar o valor que você quer, você pode abrir seu navegador, ir em ferramentas de desenvolvedor, depois console e digitar "encodeURIComponent("Nome do planeta")" o console retornará o nome do planeta codificado como no exemplo abaixo.
Depois basta copiar o código gerado e inserir no final do endpoint informado acima o ""/planetas/buscanome?nome=".
Ex: [http://localhost:8080/planetas/buscanome?nome=Yavin%20IV](http://localhost:8080/planetas/buscanome?nome=Yavin IV)
Para deletar um planeta basta fazer uma solicitação delete para o endpoint "/planetas/" indicando a ID do planeta no final do endpoint.
Ex: http://localhost:8080/planetas/1
Caso esse planeta não exista ele retornará o erro 404 não encontrado.
API criada e documentada por Eraldo Carlos de Oliveira Filho, espero que gostem e que a força esteja com voces!!!