Este projeto consiste em numa API REST de filmes. A API foi desenvolvida em Pythom com o framework Flask e banco de dados MongoDB. A API suporta operações CRUD de filmes além de registro e autorização de usuário, através de token JWT, e importação de filme através de integração com a API da OMDb.
- Python Python 3.5.2;
- pip 19.0.3;
- Flask 1.0.2;
- Mongo DB 4.0.7;
Siga os passos:
- Instalação das dependências Python através do comando abaixo:
pip install -r requirements.txt
Substituir
pip
porpip3
quando o primeiro não estiver atrelado a versão 3 do Python.
-
Criar um banco
movies_api
no MongoDB (sem autentificação) e as collectionsusers
emovies
; -
Copiar o conteúdo do arquivo
.env.example
para um novo arquivo.env
-
Executar o comando abaixo para iniciar a aplicação:
python server.py
Por padrão a aplicação será iniciada na porta 5000.
Para utilizar a aplicação é necessário primeiro registrar um usuário no banco de dados através da rota /api/register
. Feito isto é possível utilizar as credencias deste usuário para receber um token JWT de autorização através da rota /api/login
. Este token expira em 1h e é utilizado header da requisição com a chave Authorization
em endpoints que exigem autorização.
- GET /api/register - Cria um usuário;
Campos obrigatórios - Formato JSON:
name
(String) - nome do usuário,password
(String) - senha do usuário.
- POST /api/login - Recebe o token JWT para utilizar nos endpoints que exigem autorização;
Campos obrigatórios - Formato JSON:
password
(String) - senha do usuário.
- GET /api/movies - Requer autorização - Lista os filmes;
- POST /api/movies - Requer autorização - Cria um filme;
Campos obrigatórios - Formato JSON:
title
(String) - Título original do filme,brazilian_title
(String) - Título do filme no Brasil,year_of_production
(Number) - Ano do filme,director
(String) - Diretor do filme (pode ser separado por vírgulas quando houver múltiplos),genre
(String) - Gênero (pode ser separado por vírgulas quando houver múltiplos),cast
(Array) - Lista do elenco
Campos obrigatórios de um item no array
cast
:
role
(String) - nome da personagem,name
(String) - nome do ator/atriz.
- GET /api/movies/{movie_id} - Requer autorização - Exibe um filme;
Parâmetro
movie_id
representa o ID do filme no banco de dados.
- PUT /api/movies/{movie_id}/update - Requer autorização - Remove um filme;
Parâmetro
movie_id
representa o ID do filme no banco de dados.
Campos obrigatórios - Formato JSON: Pelo menos um dos campos do item 5.
- DELETE /api/movies/{movie_id}/delete - Requer autorização - Remove um filme;
Parâmetro
movie_id
representa o ID do filme no banco de dados.
- GET /api/movies/import-from-omdb/ - Requer autorização - Cria um novo filme com dados do OMDb;
Campos obrigatórios - Formato JSON:
movie_id
(String) - id do filme na base do IMDb.
Para testar os endpoints com o Postman é necessário importar os arquivos para collection
e environment
na pasta postman
.
Por padrão o endereço base da aplicação é http://localhost:5000
mas é possível especificar outro alterando a variável baseUrl
da coleção.
Rotas que necessitam autorização utilizam a variável de ambiente token
que é definida na rota login
.
Os endpoints que enviam dados no corpo da requisição possuem exemplos.
Para executar os testes unitários rode o comando abaixo:
python tests.py -v