Guía Práctica para Usar APIs REST con JavaScript

Manos escriben código en un portátil con documentación y datos visibles.

Las APIs REST (Representational State Transfer) son una piedra angular del desarrollo web moderno. Permiten que diferentes aplicaciones se comuniquen e intercambien datos entre sí de manera eficiente y estandarizada. JavaScript, siendo el lenguaje dominante en la web, es una herramienta fundamental para interactuar con estas APIs. Aprender a usar APIs REST con JavaScript abre un mundo de posibilidades para construir aplicaciones dinámicas e interactivas, desde mostrar información en tiempo real hasta integrar servicios de terceros en tus propios proyectos.

Esta guía práctica sobre APIs REST en JavaScript te dará una comprensión clara de los conceptos básicos y de las técnicas más habituales y efectivas para consumirlas. No se requiere experiencia previa con APIs, aunque una familiaridad básica con JavaScript será útil. Nos centraremos en la manipulación de datos y en cómo gestionar las respuestas de la API para que incorpores fácilmente funcionalidades basadas en datos externos en tus aplicaciones web.

El objetivo final es que puedas consumir una API REST desde JavaScript: enviar la petición adecuada, procesar la respuesta recibida y mostrar los datos de forma significativa en tu página web manipulando el DOM. Exploraremos diferentes métodos HTTP y aprenderás a manejar los errores comunes que pueden surgir durante el proceso.

Índice
  1. ¿Qué es una API REST?
  2. Requisitos Previos: Conceptos Básicos
  3. Haciendo Solicitudes con fetch
  4. Enviando Datos con POST
  5. Manejo de Errores y Códigos de Estado
  6. Autenticación con APIs
  7. Consideraciones Adicionales

¿Qué es una API REST?

Una API REST es un conjunto de reglas y estándares para construir servicios web. Imagina que quieres mostrar el clima actual en tu sitio web. En lugar de recopilar y procesar datos meteorológicos tú mismo, puedes usar una API REST que proporciona esta información. Tu aplicación envía una solicitud a la API y esta te devuelve los datos del clima en un formato legible, como JSON.

Las APIs REST se basan en los métodos HTTP estándar (GET, POST, PUT, DELETE) para realizar operaciones sobre recursos. Cada recurso tiene una URL única que lo identifica. Por ejemplo, una API para obtener información de un usuario podría tener una URL como /users/123, donde 123 es el ID del usuario. La arquitectura REST promueve una comunicación simple, escalable y flexible entre sistemas.

Relacionado:  Autenticación de Dos Factores: Actívala y Duplica la Seguridad de tus Cuentas

Requisitos Previos: Conceptos Básicos

Antes de sumergirnos en los ejemplos de código, es importante entender algunos conceptos clave:

  • URL (Uniform Resource Locator): La dirección web de un recurso en la API.
  • Método HTTP: La acción que quieres realizar sobre el recurso (GET para obtener, POST para crear, PUT para actualizar, DELETE para eliminar).
  • JSON (JavaScript Object Notation): Un formato ligero para intercambiar datos y el más habitual en las respuestas de las APIs. Coincide casi por completo con la sintaxis de objetos de JavaScript, por lo que basta con convertirlo con el método nativo JSON.parse() para trabajar con él con comodidad.
  • Headers: Información adicional que se envía con la solicitud (por ejemplo, el tipo de contenido).
  • Status Codes: Códigos numéricos que indican el resultado de la solicitud (por ejemplo, 200 OK, 404 Not Found, 500 Internal Server Error).

Haciendo Solicitudes con fetch

Manos tecleando código en un portátil con ventanas de datos JSON abiertas.

La función fetch de JavaScript está disponible de forma nativa en todos los navegadores modernos y permite realizar peticiones HTTP de manera flexible. Es la alternativa moderna a la más antigua XMLHttpRequest. Al devolver una Promesa, fetch permite manejar la respuesta de forma asíncrona encadenando .then(), o con async/await para escribir un código más legible.

Un ejemplo básico de una solicitud GET:

javascript
fetch('https://ejemplo.com/api/datos')
.then(response => {
if (!response.ok) {
throw new Error('Error en la solicitud: ' + response.status);
}
return response.json(); // Convierte la respuesta a JSON
})
.then(data => {
// Procesa los datos obtenidos de la API
console.log(data);
})
.catch(error => {
// Maneja los errores
console.error('Error al obtener los datos:', error);
});

En este ejemplo, fetch envía una solicitud GET a la URL especificada y devuelve una Promesa que se resuelve incluso cuando el servidor responde con un error HTTP como 404 o 500; por eso el primer .then comprueba response.ok y, si la respuesta no fue satisfactoria, lanza un error. El segundo .then convierte la respuesta a formato JSON y, finalmente, el .catch maneja los errores de red o los que se lanzaron en el paso anterior.

Relacionado:  Cerámicas avanzadas: De la protección térmica a implantes óseos

Enviando Datos con POST

Para enviar datos a una API (por ejemplo, para crear un nuevo recurso), se utiliza el método POST.

javascript
fetch('https://ejemplo.com/api/datos', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
nombre: 'Ejemplo',
valor: 123
})
})
.then(response => {
if (!response.ok) {
throw new Error('Error en la solicitud: ' + response.status);
}
return response.json();
})
.then(data => {
console.log('Datos enviados con éxito:', data);
})
.catch(error => {
console.error('Error al enviar los datos:', error);
});

Aquí, el objeto fetch incluye la propiedad method establecida en POST. También se define el header Content-Type para indicar que se están enviando datos en formato JSON. El cuerpo de la solicitud (body) contiene los datos que se enviarán, convertidos a una cadena JSON con JSON.stringify().

Manejo de Errores y Códigos de Estado

Manos tecleando en un portátil frente a servidores, mostrando errores de código.

El manejo de errores con fetch es fundamental en toda integración con una API. Como vimos antes, el método .catch captura los errores de red o los problemas al convertir la respuesta a JSON. Sin embargo, no debes confiarte solo en él: verificar los códigos de estado HTTP de cada respuesta es imprescindible para detectar fallos de la solicitud o del propio servidor.

Por ejemplo, el código 404 indica que el recurso solicitado no se encontró, el 401 o el 403 señalan problemas de autenticación o de permisos, y el 500 revela un error interno del servidor. Como regla general, los códigos 4xx apuntan a errores en tu solicitud y los 5xx a fallos del servidor; puedes acceder al valor exacto a través de la propiedad response.status.

Autenticación con APIs

Muchas APIs requieren autenticación para acceder a sus recursos. Existen diferentes métodos de autenticación, como claves de API, tokens de acceso o autenticación básica. La forma más común es enviar una clave de API en un header de la solicitud.

Relacionado:  Las apps imprescindibles para sacar el máximo partido a tu móvil Android/iOS

Por ejemplo:

javascript
fetch('https://ejemplo.com/api/datos', {
headers: {
'Authorization': 'Bearer TU_CLAVE_API'
}
})
.then(response => {
// ...
})
.catch(error => {
// ...
});

Reemplaza TU_CLAVE_API con tu clave de API real y ten presente que una clave de API en JavaScript del lado del cliente queda expuesta en el código fuente de la página, visible para cualquiera que inspeccione el navegador. Para protegerla, canaliza las llamadas autenticadas a través de un servidor propio que almacene el secreto en lugar de incrustarlo en el frontend.

Consideraciones Adicionales

  • CORS (Cross-Origin Resource Sharing): Es un mecanismo de seguridad del navegador que restringe las peticiones HTTP entre dominios distintos. Si al consumir una API desde JavaScript ves que el navegador bloquea la respuesta, el servidor de la API debe incluir las cabeceras CORS adecuadas, como Access-Control-Allow-Origin; otra alternativa es realizar la llamada desde tu propio backend, donde esta restricción no aplica.
  • Librerías: Cuando el proyecto crece, existen librerías para APIs REST como Axios que simplifican el trabajo con estas APIs. Aportan características como cancelación de solicitudes, interceptores para centralizar el manejo de errores o la autenticación, y protección contra ataques XSRF; además funcionan tanto en el navegador como en Node.js.
  • Asincronía: Las promesas de JavaScript son la base de la programación asíncrona con fetch. Además de encadenar .then() y .catch(), puedes escribir el mismo flujo de forma secuencial con async/await y envolverlo en try/catch, lo que suele hacer el código más fácil de leer y depurar.
  • Limitación de Tasa: Muchas APIs públicas documentan límites de solicitudes por minuto o por día y los reflejan en sus cabeceras o en su panel de desarrollador. Cuando se supera el límite, responden con el código de estado 429 y suelen incluir la cabecera Retry-After para indicar cuándo reintentar; añadir una espera antes de reintentar evita que bloqueen tu clave temporalmente.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Go up

Usamos cookies para asegurar que te brindamos la mejor experiencia en nuestra web. Si continúas usando este sitio, asumiremos que estás de acuerdo con ello. Más información