CodeForge

JavaScript de Cero a Experto / Asincronía II

Reto: buscador de países con API real

Reto45 min100 XP

El examen final de la asincronía: una app de búsqueda contra una API pública REAL (REST Countries), con estados de carga, errores bien tratados, cancelación de búsquedas viejas y datos formateados a la colombiana. Cuando termines, habrás construido el patrón que está detrás de todo buscador que hayas usado en internet.

Reto

Buscador de países

Difícil40 min100 XP(×2 sin mirar la solución)

Qué debes construir

El usuario escribe un país, envía, y la app muestra su información — así se ve tras buscar "colombia" (vista previa estática de la META; en tu versión los datos llegan de la API):

La API: https://restcountries.com/v3.1/name/NOMBRE (agrega ?fields=name,translations,capital,population,flag,currencies para pedir solo lo necesario). Responde un ARRAY de coincidencias — usarás la primera. Pruébala en el navegador con "colombia" antes de programar: mirar el JSON real es el primer paso de todo trabajo con APIs.

Requisitos:

  1. Helper cargarJSON(url, opciones) — fetch + chequeo de response.ok + throw + .json(), el de la lección 6. TODA petición pasa por él.
  2. Búsqueda por formulario: submit + preventDefault, input con trim (vacío = no buscar), y la query dentro de la URL pasada por encodeURIComponent.
  3. Los tres estados en el DOM: "Buscando..." mientras carga; el resultado en éxito; el error en su lugar (#estado). El HTML trae los 4 renglones del resultado (#nombre, #capital, #poblacion, #moneda) — se llenan con textContent.
  4. Datos con sus trampas dominadas: nombre en español (translations.spa?.common, con el común en inglés de respaldo vía ??), bandera (el campo flag es el emoji — va junto al nombre), capital (capital?.[0], es un array), población con Intl.NumberFormat("es-CO"), y moneda: currencies es un objeto cuya CLAVE no conoces de antemano — Object.keys al rescate (muestra nombre y código).
  5. 404 amigable: si la API responde 404 (país no encontrado), el estado muestra un mensaje humano que sugiera intentar en inglés — no "HTTP 404".
  6. Cancelación: cada búsqueda nueva ABORTA la anterior en vuelo (AbortController + signal); y un AbortError JAMÁS se muestra como error — esa búsqueda ya no le importa a nadie.

Reglas

  • Cero innerHTML (el texto viene de una API: mismo trato que un usuario).
  • async/await + try/catch — este módulo se rinde con su sintaxis.
  • La población SOLO la formatea Intl.
  • Patrón iniciar para esperar el DOM.
  • Nota honesta: la API busca por nombre en inglés o nativo — prueba colombia, peru, chile, japan, france, brazil. Y la población puede diferir de la vista previa: son datos vivos.

40:00

Cuando estés listo, arranca el reloj.

Qué sigue

Diez módulos: el lenguaje entero, el DOM, los eventos y ahora la asincronía con APIs reales. Lo que viene es un cambio de sombrero: el módulo 11 entra a la PROGRAMACIÓN ORIENTADA A OBJETOS en JavaScript — prototipos sin miedo, clases, herencia y los secretos de this que quedaron pendientes desde el módulo 5. La forma en que se organizan las piezas grandes.