Markdown Converter
Agent skill for markdown-converter
API REST em Python Flask para consulta de informações meteorológicas, containerizada com Docker e usando MySQL para persistência.
Sign in to like and favorite skills
API REST em Python Flask para consulta de informações meteorológicas, containerizada com Docker e usando MySQL para persistência.
Stack:
Estrutura de Serviços:
web: Aplicação Flask (api_clima) - API RESTdb: MySQL (mysql_clima) - Persistência de históricoapp.py)Inicialização com retry automático:
init_db() tenta conectar ao MySQL por até 60 segundos (30 tentativas x 2s)consultas_clima automaticamente se não existirtime.sleep(2) entre tentativasRotas REST:
GET / - Informações da API e lista de endpointsGET /health - Health check (status da app + database)GET /clima/<cidade> - Consulta clima e salva no bancoGET /historico?limit=10 - Lista últimas N consultasGET /historico/<cidade>?limit=10 - Histórico filtrado por cidadeConexão com banco:
DB_CONFIG = { 'host': os.getenv('DB_HOST', 'db'), 'cursorclass': pymysql.cursors.DictCursor # Retorna dict ao invés de tupla }
Tratamento de erros:
WEATHER_API_KEYTabela
:consultas_clima
id INT AUTO_INCREMENT PRIMARY KEY cidade VARCHAR(100) NOT NULL temperatura FLOAT descricao VARCHAR(200) umidade INT data_consulta TIMESTAMP DEFAULT CURRENT_TIMESTAMP INDEX idx_cidade (cidade) INDEX idx_data (data_consulta)
Iniciar ambiente completo:
docker-compose up -d --build
Ver logs em tempo real:
docker-compose logs -f web # App Flask docker-compose logs -f db # MySQL
Testar API rapidamente:
./demo.sh # Script de demonstração python test-api.py # Suite de testes completa
Debug interativo:
docker exec -it api_clima bash docker exec -it mysql_clima mysql -u usuario -psenha projeto
Parar e limpar:
docker-compose down # Para containers docker-compose down -v # Para + remove volumes (limpa banco)
essenciais:requirements.txt
cryptography==41.0.7 - OBRIGATÓRIA para autenticação MySQL sha256_passwordpymysql==1.1.0 - Driver MySQL puro PythonFlask-CORS==4.0.0 - Habilita CORS para APIs externasOpenWeatherMap API:
WEATHER_API_KEY configurada no docker-compose.yml/clima/<cidade> retorna 401Adicionar API Key:
# docker-compose.yml services: web: environment: WEATHER_API_KEY: sua_chave_real_aqui
Erro "cryptography package required":
cryptography no requirements.txtdocker-compose up -d --buildApp não conecta no MySQL:
depends_on: db está no docker-composedocker-compose logs db para ver se MySQL iniciouinit_db() tem retry automático (30 tentativas)Hot reload não funciona:
.:/app montado no docker-composedebug=True no app.run())app.py - Aplicação Flask (core da API)requirements.txt - Dependências PythonDockerfile - Build da imagem (instala libmysqlclient-dev)docker-compose.yml - Orquestração dos serviçostest-api.py - Suite de testes automatizadosdemo.sh - Script de demonstração rápidaREADME.md - Documentação completa do usuário