Consumindo APIs em uma Aplicação Web com Flask

Hoje em dia, muitas aplicações dependem de dados externos para funcionar: clima, notícias, cotações de moedas, resultados esportivos e muito mais. A forma padrão de obter esses dados é através de APIs (Application Programming Interfaces).

Neste artigo, você vai aprender:

  • O que é uma API e como ela funciona

  • Como consumir APIs usando Python

  • Integrar uma API em um app web com Flask

  • Exibir dados dinamicamente em templates HTML

  • Boas práticas ao trabalhar com APIs



🔹 O que é uma API?

Uma API é um conjunto de regras que permite que sistemas diferentes se comuniquem.
Exemplo: você pode acessar dados do OpenWeatherMap ou da API de filmes do OMDB diretamente do seu aplicativo Python, sem precisar abrir o site manualmente.

Tipos comuns de APIs:

  • REST API → retorna dados geralmente em JSON

  • GraphQL → retorna dados específicos conforme a consulta

  • SOAP → formato XML, mais antigo e complexo

Para este tutorial, vamos trabalhar com APIs REST que retornam JSON.


🔹 Configurando o Flask

1. Instalação

Crie um ambiente virtual e instale Flask e requests:

python -m venv venv
source venv/bin/activate   # Linux/Mac
venv\Scripts\activate      # Windows

pip install flask requests

2. Estrutura do Projeto

flask_api_app/
│── app.py
│── templates/
│    ├── index.html

🔹 Consumindo uma API com Python

Vamos usar a API gratuita do OpenWeatherMap para obter a previsão do tempo.

import requests

api_key = "SUA_CHAVE_DE_API"
cidade = "São Paulo"
url = f"http://api.openweathermap.org/data/2.5/weather?q={cidade}&appid={api_key}&lang=pt_br&units=metric"

resposta = requests.get(url)
dados = resposta.json()

print(f"Cidade: {dados['name']}")
print(f"Temperatura: {dados['main']['temp']}°C")
print(f"Clima: {dados['weather'][0]['description']}")

✅ Com isso, conseguimos os dados básicos do clima em formato JSON.


🔹 Integrando a API ao Flask

app.py:

from flask import Flask, render_template, request
import requests

app = Flask(__name__)
API_KEY = "SUA_CHAVE_DE_API"

@app.route("/", methods=["GET", "POST"])
def index():
    clima = None
    if request.method == "POST":
        cidade = request.form["cidade"]
        url = f"http://api.openweathermap.org/data/2.5/weather?q={cidade}&appid={API_KEY}&lang=pt_br&units=metric"
        resposta = requests.get(url)
        if resposta.status_code == 200:
            dados = resposta.json()
            clima = {
                "cidade": dados["name"],
                "temperatura": dados["main"]["temp"],
                "descricao": dados["weather"][0]["description"]
            }
        else:
            clima = {"erro": "Cidade não encontrada."}
    return render_template("index.html", clima=clima)

1. Template HTML (templates/index.html)

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Consulta de Clima</title>
</head>
<body>
    <h1>🌤 Consulta de Clima</h1>
    <form method="post">
        <input type="text" name="cidade" placeholder="Digite a cidade" required>
        <button type="submit">Buscar</button>
    </form>

    {% if clima %}
        {% if clima.erro %}
            <p style="color:red;">{{ clima.erro }}</p>
        {% else %}
            <h2>{{ clima.cidade }}</h2>
            <p>Temperatura: {{ clima.temperatura }}°C</p>
            <p>Clima: {{ clima.descricao }}</p>
        {% endif %}
    {% endif %}
</body>
</html>

✅ Agora temos um formulário funcional: o usuário digita uma cidade, a aplicação consulta a API e exibe o resultado em tempo real.


🔹 Boas práticas ao consumir APIs

  1. Trate erros de conexão: use try/except para evitar travamentos.

  2. Checar status code: sempre verifique resposta.status_code antes de acessar os dados.

  3. Limite de requisições: muitas APIs gratuitas possuem limite de chamadas.

  4. Armazenamento em cache: salve resultados em memória ou banco para reduzir chamadas repetidas.

  5. Não exponha sua chave de API: use variáveis de ambiente (os.environ) para proteger credenciais.


🔹 Possíveis Expansões

  • Adicionar mais APIs (cotações, notícias, filmes, etc).

  • Criar dashboard interativo com gráficos usando Plotly ou Chart.js.

  • Permitir buscas múltiplas e salvar histórico do usuário.

  • Integrar com Flask-Login para exibir dados personalizados de cada usuário.


🔹 Conclusão

Consumir APIs em Flask é simples e poderoso, permitindo criar aplicações web dinâmicas e interativas sem depender apenas de dados internos.

  • Com requests, você consegue interagir com qualquer API REST.

  • Com Flask, é fácil mostrar os dados em páginas HTML usando templates.

  • Esse conhecimento é a base para projetos mais avançados, como dashboards, sistemas de previsão, aplicações financeiras e muito mais.

💡 Desafio prático: Adapte a aplicação para consumir duas APIs ao mesmo tempo (por exemplo: clima + cotação do dólar) e exibir tudo em uma página.

Comentários

Postagens mais visitadas deste blog

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server