Uma API REST que retorna playlists específicas de música baseadas na temperatura da cidade fornecida. Esta API foi desenvolvida em Python, utilizando Flask, uWSGI, MongoDB e Docker.
A API recebe uma cidade como entrada, e retorna em JSON playlists aleatórias com base na temperatura atual da cidade fornecida.
- Caso a temperatura seja maior que 25 graus Celsius, deverá retornar playlists de músicas pop;
- Caso esteja entre 10 e 25 graus Celsius, deverá retornar playlists de músicas de rock;
- Caso esteja abaixo de 10 graus Celsius, deverá retornar playlists de música clássica.
São utilizadas a API do OpenWeather para consultar a temperatura atual, e a API do Spotify para retornar as informações sobre as músicas.
O serviço também possui um histórico de chamadas e estatísticas que é armazenado em um banco de dados.
- Gateway - Foi utilizado o uWSGI para permitir e controlar processos simultâneos;
- API - Aplicação construída em Python junto com o framework Flask para criação de endpoints. Utiliza cache em algumas funções, possui rate limit e circuit breaker.
- Banco de dados - Grava o histórico de chamadas da API dentro de um banco MongoDB;
- Docker - Utiliza dois containers: um para a API e para o serviço web, e outro para o banco de dados.
Após clonar o repositório, será necessário definir as variáveis contendo os tokens das APIs do OpenWeatherMap e do Spotify no arquivo app/config_propriedades.py
Clique aqui para requisitar o APPID do OpenWeatherMap, e aqui para requisitar o CLIENT_ID e CLIENT_SECRET do Spotify.
Com os tokens em mãos, defina as variáveis openweather, spotify_client_id e spotify_secret_id no arquivo de configurações.
Para iniciar a aplicação, execute o docker-compose na pasta raiz:
$ docker-compose up --detach --build
Os logs podem ser acompanhados pelo comando:
$ docker-compose logs --follow
Após a instalação a API ficará disponível através do endereço abaixo, onde a cidade para requisição deverá substituir <cidade>:
http://localhost:8080/api/v1/playlists/cidades/<cidade>
Endpoints:
- Retornar playlists de músicas pelo nome da cidade:
GET localhost:8080/api/v1/playlists/cidades/<cidade>
- Retornar o histórico de chamadas:
GET localhost:8080/api/v1/playlists/historico
Foi realizado um deploy dessa aplicação na plataforma Heroku, que pode ser consultada utilizando um dos endpoints acima: