Movies API

API em Rails para catálogo de filmes, com leitura CSV e listagem JSON. #Rails #API #BackendChallenge‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

Movies API

Tecnologias Empregadas:

  • Ruby 3.0.4

  • Rails 6.1.7.3

  • PostgreSQL 12.14

  • Ubuntu 20.04

  • Gems:

    • kaminari

    • pg_search

Descrição:

Desafio realizado para uma oportunidade backend. O teste consistiu em criar uma API de serviço do catálogo de filmes com dois endpoints:

  • Um que faça a leitura de um arquivo CSV para registrá-los no banco de dados.

  • Um segundo que liste todos os filmes cadastrados em formato JSON.

Para tanto, foi necessário utilizar Ruby on Rails, seguir o padrão de API Restful, além de que a response deveria seguir um padrão pré-estabelecido, ordenado pela data de lançamento do filme e não deveria possuir duplicidade de registros.

Veja o repositório do código para acessar as instruções de acesso à API.

Principais Desafios:

  1. Desenvolvimento Inicial: Criar uma API de serviço do catálogo de filmes utilizando Ruby on Rails, especialmente se for a primeira experiência com a tecnologia.

  2. Leitura de Dados: Implementar um método eficiente para ler informações de um arquivo CSV e inseri-las no banco de dados.

  3. Modelagem de Dados: Garantir que a estrutura do banco de dados suporte todos os detalhes do filme, incluindo título, diretor, sinopse, ano de lançamento e gênero.

  4. Seleção do Banco de Dados: Escolher entre SQLite, Postgresql ou MongoDB, cada um com suas peculiaridades e características.

  5. Implementação RESTful: Adotar e manter o padrão RESTful ao desenvolver os endpoints da API.

  6. Ordenação e Filtragem: Desenvolver funcionalidades de ordenação e filtragem, especialmente quando as regras de ordenação são específicas (por exemplo, ordenar pelo ano de lançamento).

  7. Prevenção de Duplicidade: Implementar lógica para garantir que não haja registros duplicados, o que pode ser complexo dependendo da estrutura dos dados.

  8. Estrutura de Resposta Exata: Assegurar que a resposta do endpoint de listagem adira estritamente ao formato especificado.

  9. Configuração de Ambiente: Lidar com configurações específicas, como a extensão 'pgcrypto' e a autenticação como 'SUPERUSER' no PostgreSQL, que podem ser desafiadoras para desenvolvedores menos experientes.

  10. Paginação Eficiente: Implementar paginação que seja tanto eficiente em termos de desempenho quanto amigável ao usuário.

  11. Implementação de Busca: Utilizar ferramentas como 'PG-Search' para oferecer um serviço de busca robusto e abrangente.

  12. Testes: Decidir quais testes são necessários, como implementá-los usando RSpec e garantir que eles cubram todos os aspectos críticos da aplicação.

Screenshots:

Consulta da API de filmes buscando pelo título 'Batman' com resultados em JSON:

Consulta da API de filmes buscando pelo título 'Batman' com resultados em formato JSON.

Resposta de erro da API quando nenhum termo de busca é fornecido, retornando todos os filmes cadastrados:

Nesta captura de tela, observamos o resultado de um pedido POST bem-sucedido ao endpoint /api/v1/movies usando o Postman. O arquivo netflix_titles.csv foi carregado com sucesso, e o servidor confirmou o recebimento e o processamento corretos do arquivo, retornando a mensagem: "Acabamos de salvar o CSV que você nos enviou. Obrigado":

Resposta de erro da API quando nenhum termo de busca é fornecido, garantindo a qualidade e a precisão dos resultados:

Nesta tela, tentou-se fazer o upload de um arquivo com a extensão .xlsx, que não é compatível com as especificações da API. Em resposta, o servidor indica claramente que aceita apenas arquivos CSV e pede ao usuário que verifique o formato do arquivo antes de enviar:

Esta imagem mostra a resposta do servidor após uma tentativa de enviar um pedido POST sem anexar um arquivo CSV. Como resultado, o servidor retorna uma mensagem de erro indicando que nenhum arquivo CSV foi recebido e solicitando que o usuário tente novamente.