Marco OllivierVoltar ao Blog
Desenvolvimento

Pratique com APIs de verdade - ClimaTempo

Marco Ollivier
10 de Agosto, 2023
8 min de leitura
APIsGoJavaScriptPrática

Pratique com APIs de verdade - ClimaTempo

Uma das melhores formas de aprender desenvolvimento é praticando com APIs reais. A API do ClimaTempo é perfeita para isso: é gratuita, bem documentada e oferece dados interessantes.

Por que usar APIs reais?

Trabalhar com APIs reais te prepara para desafios do mundo real:

  • Rate limiting: Aprenda a lidar com limites de requisições
  • Autenticação: Pratique com tokens e chaves de API
  • Tratamento de erros: APIs reais falham, e você precisa estar preparado
  • Dados inconsistentes: Nem sempre os dados vêm como esperado

Configurando a API do ClimaTempo

1. Obtenha sua chave de API

Acesse o site do ClimaTempo e registre-se para obter sua chave gratuita.

2. Exemplo básico em Go

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type WeatherResponse struct {
    Data []struct {
        Date        string  `json:"date"`
        Text        string  `json:"text"`
        Temperature struct {
            Min int `json:"min"`
            Max int `json:"max"`
        } `json:"temperature"`
    } `json:"data"`
}

func getWeather(cityID string, token string) (*WeatherResponse, error) {
    url := fmt.Sprintf("http://apiadvisor.climatempo.com.br/api/v1/weather/locale/%s/days/15?token=%s", cityID, token)
    
    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    
    var weather WeatherResponse
    if err := json.NewDecoder(resp.Body).Decode(&weather); err != nil {
        return nil, err
    }
    
    return &weather, nil
}

3. Exemplo em JavaScript

async function getWeather(cityId, token) {
    try {
        const response = await fetch(
            `http://apiadvisor.climatempo.com.br/api/v1/weather/locale/${cityId}/days/15?token=${token}`
        );
        
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        
        const data = await response.json();
        return data;
    } catch (error) {
        console.error('Erro ao buscar dados do clima:', error);
        throw error;
    }
}

Projetos práticos

1. Dashboard de clima

Crie um dashboard que mostra:

  • Temperatura atual
  • Previsão para os próximos dias
  • Gráficos de temperatura
  • Alertas meteorológicos

2. Bot do Telegram

Desenvolva um bot que:

  • Responde com a previsão do tempo
  • Envia alertas diários
  • Permite consulta por cidade

3. API Gateway

Construa um gateway que:

  • Agrega dados de múltiplas fontes
  • Implementa cache
  • Adiciona rate limiting

Boas práticas

1. Tratamento de erros

func handleAPIError(resp *http.Response) error {
    switch resp.StatusCode {
    case 401:
        return errors.New("token inválido")
    case 429:
        return errors.New("muitas requisições - aguarde")
    case 500:
        return errors.New("erro interno da API")
    default:
        return fmt.Errorf("erro HTTP: %d", resp.StatusCode)
    }
}

2. Cache inteligente

type CachedWeather struct {
    Data      *WeatherResponse
    Timestamp time.Time
    TTL       time.Duration
}

func (c *CachedWeather) IsValid() bool {
    return time.Since(c.Timestamp) < c.TTL
}

3. Rate limiting

import "golang.org/x/time/rate"

type APIClient struct {
    limiter *rate.Limiter
    client  *http.Client
}

func (c *APIClient) makeRequest(url string) (*http.Response, error) {
    if err := c.limiter.Wait(context.Background()); err != nil {
        return nil, err
    }
    
    return c.client.Get(url)
}

Conclusão

Praticar com APIs reais como a do ClimaTempo te prepara para desafios reais de desenvolvimento. Comece simples e vá evoluindo seus projetos conforme ganha experiência.

Lembre-se: o importante é praticar e aprender com os erros. APIs reais são imprevisíveis, e isso é exatamente o que torna a prática valiosa.