DESAFIO API STAR WARS B2W - PEDRO TEIXEIRA BISOGNIN

Índice

  1. Sobre o projeto
  2. Tecnologias utilizadas
  3. Configurando a API
  4. Efetuando testes
  5. Funcionalidades
    1. Inserindo um planeta
    2. Listando todos os planetas
    3. Fazendo busca por ID
    4. Fazendo busca por NOME
    5. Deletando um planeta
  6. Considerações finais

    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 Docker para seu sistema operacional, 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.

    PARA USAR O DOCKER NO WINDOWS

    Clicar em Executar Primeiro.bat ele ira gerar a pasta target com o jar do projeto e após isso clicar em Executar Segundo.bat, ele irá baixar a imagem para executar o projeto, juntamente com a imagem do mongodb, após isso, basta usar o projeto com postman ou o SoapUI

    NO MAVEN

    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.

    NO ECLIPSE

    Após importar o projeto, executar o mongoDB, alterar em aplication.properties o host do mongo, descomente localhost e comente mongo, após isso é só 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 JUNIT4, 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.Caso algum teste fique em vermelho, o execute o método sozinho, pois pode ser problema de sincronismo entre os métodos.(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 "/planets".

    Ex: http://localhost:8080/planets

{
   "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 "/planets".

    Ex: http://localhost:8080/planets

    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 "/planets/" junto com a id que você quer pesquisar.

    Ex: http://localhost:8080/planets/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 "/planets/findname?name=", junto com o nome que você quer pesquisar. Durante meus testes com o Postman não utilizei nenhuma codificação, mas talvez o SoapUI necessite codificar para UTF-8.

    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 ""/planets/findname?name=".

    Ex: http://localhost:8080/planets/findname?name=Yavin%20IV

    Para deletar um planeta basta fazer uma solicitação delete para o endpoint "/planets/" indicando a ID do planeta no final do endpoint.

    Ex: http://localhost:8080/planets/1

    Caso esse planeta não exista ele retornará o erro 404 não encontrado.

    API criada e documentada por Pedro Teixeira Bisognin, espero que gostem e que a força esteja com voces!!!