Code Monkey home page Code Monkey logo

api-movie-catalog's Introduction

API Movie catalog

Descrição da API:

A aplicação foi feita utilizando o framewrok Laravel na versão 5.6 com banco de dados relacional MySQL. Decidi usar o MySQL para persistir os dados por que devido à especificação do projeto ficou claro que exigia um modelo de banco dados relacional. o MySQL é uma boa opção por causa da simplicidade de se trabalhar, sendo agil para o desenvolvimento de aplicações de pequeno porte mas com uma boa margem para escalar. Além de ser uma tecnologia de banco de dados bastante utilizada pela comunidade possuindo ampla compatibilidade com as tecnologias de desenvolvimento do mercado.

Na API é possível realizar o cadastro de um catálogo de filmes, descrevendo detalhes como a classificação indicativa, diretor, e elenco.

  • É possível listar todos os filmes cadastrados, todos os diretores cadastrados bem como todos os atores cadastrados.
  • De forma semelhante é possivel listar um registro único de cada entidade passando o id como parâmetro na rota.
  • Nessas requisições de filtragem de um registro único, na resposta estão inclusos os dados dos relacionamentos de forma detalhada. De forma que é possível ver qual é o diretor de um filme, ver quais são os atores que estralaram naquele filme.
  • Semelhantemente, é possível listar todos os filmes que um diretor específico dirigiu, e todos os filmes em que um ator espefícido participou do elenco.
  • Nas requisição de listagem de todos os registro de uma tabela, por exemplo listagem de todos os filmes, não são retornados os dados das tabelas relacionados melhorando assim o desempenho das resposta. Não há necessidade de mostrar tantos detalhes numa listagem tão genérica.
  • É possível alterar dados como nome dos filmes, classificação, nome dos diretores, nomes dos atores.
  • É possível deletar qualquer registro criado via os endpoints abertos.

Descrição dos relacionamentos:

  • A tabela de diretores tem relacionamento de 1 para muitos com a tabela de filmes.
  • A tabela de filmes tem relacionamento de muitos para 1 com a tabela de diretores.
  • A tabela de filmes tem relacionamento de muitos para muitos com a tabela de atores.
  • As tabelas de filmes e atores geram uma tabela pivot chamada casts (elencos) por causa do seu relacionameto muitos para muitos.

Durante o desenvolvimento pensei num modelo mais enxuto e simples possível respeitando as especificações passadas.

Existem 3 tabelas principais e 1 tabela pivot que relaciona os filmes com os atores participantes do mesmo.

A parte da classificação do filme, decidi não incluí-la em uma tabela própria, por questões de simplicidade, até porque um simples campo de úmero na tabela movies já dá conta desta informação.

Mas à título de informação esta poderia ser uma tabela à parte contendo uma campo id (pk) e um campo idade do tipo inteiro, e uma referência da classificação na tabela movies via uma foreign key chamada classification_id.

Tabelas do banco:

movies:

campos:
  • id (pk) - id do filme.
  • name - nome do filme.
  • classification - classificação recomendada do filme.
  • director_id (fk) - id do diretor do filme.

directors:

campos:
  • id (pk) - id do diretor.
  • name - nome do diretor de filmes.

actors:

campos:
  • id (pk) - id do ator.
  • name - nome do ator de cinema.

casts: tabela pivot entre movies e actors que representa a abstração do elenco dos filmes.

campos:
  • id (pk) - id do registro filme x ator.
  • movie_id (fk) - representa o id do filme.
  • actor_id (fk) - representa o id do ator.

Endpoints:

Diretores:

MÉTODO GET:
  • Listagem de todos: localhost/api/directors
  • Filtro pelo ID: localhost/api/directors/{id do diretor}
MÉTODO POST:
  • Criação: localhost/api/directors/
    • Enviar campos: name (string obrigatorio).
MÉTODO PUT:
  • Atualização: localhost/api/directors/{id do diretor}
    • Enviar campos: name (string obrigatorio).
MÉTODO DELETE:
  • Exclusão: localhost/api/directors/{id do diretor}

Atores:

MÉTODO GET:
  • Listagem de todos: localhost/api/actors
  • Filtro pelo ID: localhost/api/actors/{id do ator}
MÉTODO POST:
  • Criação: localhost/api/actors/
    • Enviar campos: name (string obrigatorio).
MÉTODO PUT:
  • Atualização: localhost/api/actors/{id do ator}
    • Enviar campos: name (string obrigatorio).
MÉTODO DELETE:
  • Exclusão: localhost/api/actors/{id do ator}

Filmes:

MÉTODO GET:
  • Listagem de todos: localhost/api/movies
  • Filtro pelo ID: localhost/api/movies/{id do filme}
MÉTODO POST:
  • Criação: localhost/api/movies/
    • Enviar campos: name (string obrigatorio); classification (obrigatorio), director_id (obrigatorio), actors_id (array de inteiros obrigatorio) exemplo: "actors_id": [1, 2, 3, 4]
MÉTODO PUT:
  • Atualização: localhost/api/movies/{id do filme}
    • Enviar campos: name (string obrigatorio)
MÉTODO DELETE:
  • Exclusão: localhost/api/movies/{id do filme}

Arquivo de documentação e informações de como configurar o projeto em /documentacao-ultilizacao-api.txt

Arquivo da coleção do Postman em /Movie Catalog API.postman_collection.json

api-movie-catalog's People

Contributors

brunoadpaixao avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.