Desenvolvimento
Pratique com APIs de verdade - ClimaTempo
3 min de leitura
Marco Ollivier
APIsGoJavaScriptPrática
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?Link para esta seção
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 ClimaTempoLink para esta seção
1. Obtenha sua chave de APILink para esta seção
Acesse o site do ClimaTempo e registre-se para obter sua chave gratuita.
2. Exemplo básico em GoLink para esta seção
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 JavaScriptLink para esta seção
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áticosLink para esta seção
1. Dashboard de climaLink para esta seção
Crie um dashboard que mostra:
- Temperatura atual
- Previsão para os próximos dias
- Gráficos de temperatura
- Alertas meteorológicos
2. Bot do TelegramLink para esta seção
Desenvolva um bot que:
- Responde com a previsão do tempo
- Envia alertas diários
- Permite consulta por cidade
3. API GatewayLink para esta seção
Construa um gateway que:
- Agrega dados de múltiplas fontes
- Implementa cache
- Adiciona rate limiting
Boas práticasLink para esta seção
1. Tratamento de errosLink para esta seção
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 inteligenteLink para esta seção
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 limitingLink para esta seção
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ãoLink para esta seçã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.