Cómo integré APIs externas en Node.js sin volverme loco

Integrar APIs externas siempre suena fácil en teoría: un fetch, un axios.get y listo. Pero la realidad es que terminas peleándote con tokens, límites de peticiones y formatos de respuesta que parecen diseñados para arruinarte el día.
Yo tuve mis buenas dosis de frustración la primera vez que intenté meter Google Maps API y luego con una API de autenticación de terceros. Aquí te cuento cómo sobreviví.

El primer intento: Google Maps

Todo comenzó cuando quería mostrar ubicaciones en un proyecto sencillo. Me registré en la consola de Google, saqué la API Key y me lancé con entusiasmo… hasta que me di cuenta que cada petición tenía límites y que necesitaba configurar billing para que no me bloquearan.

import axios from "axios"

const apiKey = "TU_API_KEY"
const direccion = "Madrid, España"

async function geocode() {
  const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(direccion)}&key=${apiKey}`
  const res = await axios.get(url)
  console.log(res.data.results[0].geometry.location)
}

geocode()

La primera vez funcionó, y luego me encontré con el famoso error de cuota excedida. Aprendí rápido que no puedes confiar ciegamente en que la API estará siempre disponible ni gratis.

Manejar errores y límites

Un error clásico al usar APIs externas es no manejar los errores. Si haces peticiones en bucle sin control, vas directo a que te bloqueen.

try {
  const res = await axios.get(url)
  return res.data
} catch (err) {
  console.error("Error al llamar a la API:", err.message)
  return null
}

Además, algunas APIs devuelven respuestas con códigos extraños o datos anidados hasta el infinito. Paciencia y console.log fueron mis mejores amigos.

Autenticación con tokens

Otra batalla fue con una API que requería OAuth 2.0. Yo solo quería datos, pero terminé leyendo sobre access tokens, refresh tokens y expiraciones. Al final descubrí que lo mejor es encapsular toda esa lógica en un servicio separado.

import axios from "axios"

async function getData(token) {
  const res = await axios.get("https://api.example.com/data", {
    headers: { Authorization: `Bearer ${token}` }
  })
  return res.data
}

Tener un middleware que refresque tokens automáticamente me salvó de muchos dolores de cabeza.

Lo que aprendí de todo esto

  • Lee la documentación completa, aunque dé pereza. Te ahorras sorpresas.
  • Maneja los errores siempre, nunca asumas que la API responderá bien.
  • Cuida las cuotas y límites, sobre todo en proyectos en producción.
  • Separa la lógica de integración, así si la API cambia, no destrozas todo tu proyecto.

Conclusión

Integrar APIs externas en Node.js es como salir a carretera con un coche viejo: puede funcionar perfecto o dejarte tirado en cualquier momento. La clave está en programar defensivamente y no confiar en que la otra parte siempre cumplirá.

Hoy en día cada vez que me toca una API nueva, ya voy con más calma y preparo el terreno para errores. Lo que antes era frustración, ahora lo veo como parte natural del proceso de desarrollo.