Esta API possui como principal dois endpois, sendo eles um POST onde é enviado um arquivo CSV com todos os dados necessários dos filmes a serem gravados e o outro um GET onde é selecionado todos os filmes na base de dados.
Primeiramente faça o clone do repositório para seu ambioente local
git clone https://github.com/DevGuiRocha/Catalogo_Filmes_API.git
Entre no diretório do projeto
cd Catalogo_Filmes_API
Instale as dependências necessárias para a execução do projeto
bundle install
Se necessário, edite o arquivo config/database.yml
para alterar as configurações para seu ambiente local, assim como usuario e senha do PostgreSQL para conexões
Rode os seguintes comandos para que seja criado as bases de desenvolvimento/testes e a criação das tabelas
rails db:create
rails db:migrate
Inicie o servidor
rails s
Com o comando acima, o rails irá executar na porta padrão 3000. Contudo, se desejar alterar a porta de execução, basta rodar o seguinte comando
rails s -p porta_de_sua_escolha
Lembre-se da porta que escolher para a execução dos comandos necessários posteriormente ;)
Os registros abaixo são descritos para o Insomnia, mas funcionam também para o Postman ou qualquer outro software para testes em API:
- Clique em Create > New Request Collection.
- Nomeie a coleção como "Catálogo de Filmes API".
- Importar CSV,
- Listar Filmes,
- Listar Filmes com Paginação.
- Método:
POST
- Endpoint:
/api/v1/movies/import_csv
- Como configurar no Insomnia:
- 1.Clique em New Request e nomeie como "Importar CSV".
- 2.Selecione o método POST.
- 3.Insira a URL completa:
http://localhost:3000/api/v1/movies/import_csv
- Caso tenha escolhido outra porta para iniciar o servidor rails, lembre-se de alterar o
3000
para a porta que escolheu
- Caso tenha escolhido outra porta para iniciar o servidor rails, lembre-se de alterar o
- 4.Na aba Body, escolha o tipo de corpo como Multipart Form.
- 5.Adicione um campo com o nome file.
- Clique em Choose File para selecionar o arquivo CSV de importação.
- 6.Clique em Send para enviar a requisição.
- Resposta esperada:
- Uma mensagem de sucesso será exibida na aba de resposta:
{
"message": "Filmes importados com sucesso"
}
- Possíveis Erros:
- Se o arquivo não for fornecido ou estiver malformado, você verá uma mensagem de erro com status
422 Unprocessable Entity.
- Se o arquivo não for fornecido ou estiver malformado, você verá uma mensagem de erro com status
- Método:
GET
- Endpoint:
/api/v1/movies
- Como configurar no Insomnia:
- 1.Clique em New Request e nomeie como "Listar Filmes".
- 2.Selecione o método GET.
- 3.Insira a URL completa:
http://localhost:3000/api/v1/movies
.- Caso tenha escolhido outra porta para iniciar o servidor rails, lembre-se de alterar o
3000
para a porta que escolheu
- Caso tenha escolhido outra porta para iniciar o servidor rails, lembre-se de alterar o
- 4.Para adicionar filtros:
- 4.1 Clique na aba Query.
- 4.2 Adicione parâmetros opcionais, como:
- year: Filtra pelo ano de lançamento (ex.: 2020).
- genre: Filtra pelo gênero do filme (ex.: "Drama").
- country: Filtra pelo país de origem (ex.: "United States").
- 5.Clique em Send para visualizar a listagem dos filmes.
- Resposta esperada:
- Um array de filmes no formato JSON será exibido na aba de resposta:
[
{
"id": "s1",
"title": "13 Reasons Why",
"genre": "TV Show",
"year": 2020,
"country": "United States",
"published_at": "2020-05-07",
"description": "A classmate receives a series of tapes that unravel the mystery of her tragic choice."
},
...
]
- Possíveis Erros:
- Se houver algum problema inesperado no servidor, você verá uma mensagem de erro com status
500 Internal Server Error
.
- Se houver algum problema inesperado no servidor, você verá uma mensagem de erro com status
- Método:
GET
- Endpoint:
/api/v1/movies
- Como configurar no Insomnia:
- 1.Clique em New Request e nomeie como "Listar Filmes com Paginação".
- 2.Selecione o método GET.
- 3.Insira a URL completa:
http://localhost:3000/api/v1/movies
.- Caso tenha escolhido outra porta para iniciar o servidor rails, lembre-se de alterar o
3000
para a porta que escolheu
- Caso tenha escolhido outra porta para iniciar o servidor rails, lembre-se de alterar o
- 4.Na aba Query, adicione os parâmetros:
- 4.1 page: Define a página atual (ex.: 1).
- 4.2 Parâmetros opcionais:
- 4.2.1 year, genre, country: Mesmo filtro opcional descrito anteriormente.
- 5.Clique em Send para visualizar a listagem paginada.
- Resposta esperada:
- Um array de filmes paginado no formato JSON será exibido na aba de resposta:
[
{
"id": "s1",
"title": "17 Again",
"genre": "Movie",
"year": 2019,
"country": "United States",
"published_at": "2019-03-10",
"description": "A man magically gets to relive his teenage years."
},
...
]
- Possíveis Erros:
Se houver um problema inesperado no servidor, você verá uma mensagem de erro com status
500 Internal Server Error
Para a execução dos testes, basta rodar o seguinte comando:
bundle exec rspec
Foram desenvolvidos um total de 7 testes para esta API, um número significativo dado a finalidade do projeto.
Os testes do models podem ser encontrados no arquivo movie_spec.rb
, encontrado no seguinte caminho
spec/models/movie_spec.rb
Os testes para o controller da API podem ser encontrados no arquivo movies_spec.rb
, encontrado no seguinte caminho
spec/requests/api/v1/movies_spec.rb
Por se tratar de uma API, não foi contruído nada referente a telas então não se tem tecnologias para Front-end. Foram utilizadas apenas tecnologias de Back-end e banco de dados, descritas abaixo:
Back-end: Ruby versão 3.0.0, Rails versão 7.0.8.5
Gems em destaque: Kaminari para paginação do json, RSpec para testes da API
Banco de Dados: PostgreSQL versão 16
Testes em API: Insomnia (Software)
Ao realizar a criação desa API, pude ter uma certeza que é com essa tecnologioa que quero seguir a minha vida de programador. Ruby e Rails são tecnologioas ágeis e intuitivas, o que faz com que uma seção de programação seja extremamente divertida e gratificante. Construir esta API também me fez perceber a importância destas no mundo da tecnologia, e o quão grande pode se tornar uma simples ideia. Espero seguir adiante sempre com novos desafios, garantindo uma boa qualidade nos meus projetos e me tornar um desenvolvedor que não apenas ajude outros no futuro, mas que torne um exemplo a ser seguido futuramente.