Prémio Pior Filme (uma categoria do Golden Raspberry Awards) é um projeto desenvolvido para participar do processo seletivo da empresa TexoIT para a vaga de desenvolver Java Web direcionada ao Back End.
O projeto consiste em realizar a leitura de um arquivo .csv contendo os dados do filmes e staff indicados ao prémio permitindo consultar-los e manipular-los.
Para o denvolvimento do projeto foi desenvolvido uma API RESTful responsável pela manulipulação dos dados através dos métodos GET, POST, PUT e DELETE as operações necessária.
- IDE de Desenvolvimento: NetBeans 8.2 com Java EE 6
- Gerenciador de Dependências: Maven 3.1
- Framework para desenvolvimento da API: Spring Boot 2.1
- Servidor de Aplicação: Apache Tomcat 8.0
- Testes da API RESTful: Postman
-
Instalar a IDE NetBeans 8.2 com Java EE 8
-
Instalar o servidor de aplicação Apache Tomcat 8.0
-
Abrir o projeto e selecionar a opção "Limpar e contruir" para que a IDE possa baixar as dependências.
URL Base: http://localhost:8080/
-
A porta pode ou não mudar dependendo da escolha durante a instalação do servidor de aplicação.
-
O deploy do projeto pode ocorrer de duas maneira: a convencional que é gerar o ".war" e realizar o deploy em um servidor de aplicação externo ou gerar um arquivo ".jar" e utilizar o suporte do Spring encapsular Tomcat.
Utilizei os status code do protocolo HTTP, disponíveis no header de cada response.
200 OK
Tudo funcionou como esperado.
201 OK
O Recurso foi criado com sucesso.
400 Bad Request
Geralmente, um problema com os parâmetros.
404 Not Found
O recurso acessado não existe.
500 Server errors
Falha minha, algum erro no servidor.
Permite obter os vencedores de um determinado ano.
Resource URL
GET http://localhost:8080/winners/
Parâmetros
- Ano - Obrigatório
Exemplo de Requisição
http://localhost:8080/winners/1980
Exemplo de Resposta
[
{
"id": 1,
"year": 1980,
"title": "Can't Stop the Music",
"studios": [
"Associated Film Distribution"
],
"producers": [
"Allan Carr"
],
"winner": true
}
]
Permite obter os anos que tiveram mais de um vencedor.
Resource URL
GET http://localhost:8080/years
Parâmetros
- Nenhum
Exemplo de Requisição
http://localhost:8080/years
Exemplo de Resposta
{
"years": [
{
"year": 1986,
"winnerCount": 2
},
{
"year": 1990,
"winnerCount": 2
},
{
"year": 2015,
"winnerCount": 2
}
]
}
Permite obter dos estúdios ordernada pelo número de vitórias.
Resource URL
GET http://localhost:8080/studios
Parâmetros
- Nenhum
Exemplo de Requisição
http://localhost:8080/studios
Exemplo de Resposta
{
"studios": [
{
"name": "Paramount Pictures",
"winCount": 6
},
{
"name": "Columbia Pictures",
"winCount": 6
},
{
"name": "Warner Bros.",
"winCount": 5
}
]
}
Obter o produtor com maior intervalo entre dois prêmios, e o que obteve dois prêmios mais rápido.
Resource URL
GET http://localhost:8080/producers
Parâmetros
- Nenhum
Exemplo de Requisição
http://localhost:8080/producers
Exemplo de Resposta
{
"min": [
{
"producer": "Producer Name", "interval": 9,
"previousWin": 2018, "followingWin": 2019
}
],
"max": [
{
"producer": "Producer Name", "interval": 99,
"previousWin": 1900, "followingWin": 1999
}
]
}
Permiter deletar um filme da lista desde que este não seja um vencedor.
Resource URL
DELETE http://localhost:8080/movies
Parâmetros
- Id - Obrigário para localizar o filme a ser excluído.
Exemplo de Requisição
http://localhost:8080/movies/1
Exemplo de Resposta
204 OK
Tudo funcionou porém não há informação a ser retornada.
403 Not Found
Operação não permitida.
A realização dos testes unitários durante o devenvolvimento de uma API nos ajuda a entender e validar os rescursos e dados.
As seguintes validações devem ser consideradas:
- Validar os dados que retorna.
- Validar os headers da resposta
- Validar se a resposta está de acordo.
- Validar se o content-type alterado, o comportamento continua o mesmo.
- Validar se a estrutura do JSON ou XML está correta.
- Validar se quando der erro o status está de acordo com os códigos de erro.
- Validar se uma requisição com informações incompleta, qual será o comportamento da requisição.
- Testar o tempo de resposta de uma requisição
Os testes implementados para a API encontranm-se na classe [MovieControllerTest.java] e uma vez que estes são testes voltados para testar o correto funcionadmento dos recurso da API, utilizamos de informação ficticias que nos permite simular os possiveis cenários.
Para simular os casos basta alterar as informações ali presentes e executar a classe que irá inicializar apenas os recursos necessários ao final da execução será apresentado o resultado para cada um dos testes, no caso de falha será indicado a causa.