Skip to content

Fetch

Fetch es una alternativa moderna a XMLHttpRequest que simplifica la realización de solicitudes HTTP desde aplicaciones web. Proporciona una forma fácil y lógica de obtener recursos de forma asíncrona, y es especialmente útil para trabajar con promesas y el manejo de respuestas HTTP.

Características Principales de Fetch

  • Promesas: Fetch utiliza promesas para manejar las respuestas y errores, lo que facilita el flujo de control asincrónico.
  • Manejo de Errores: A diferencia de XMLHttpRequest, Fetch no rechaza la promesa en caso de un error HTTP, sino que se resuelve con un objeto Response que contiene el estado de la respuesta.
  • Control de Credenciales: Por defecto, Fetch no envía ni recibe cookies, aunque esto puede configurarse a través de las opciones de inicialización.
  • Compatibilidad con Service Workers: Fetch es compatible con Service Workers, lo que permite interceptar y manejar solicitudes de red.

Uso Básico de Fetch con ejemplo real

Ejemplo de cómo usar Fetch para obtener datos de una API con .then y .catch:

fetch("https://pokeapi.co/api/v2/pokemon/")
.then((response) => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.json(); // Convierte la respuesta a formato JSON
})
.then((data) => {
// Maneja los datos recibidos
console.log(data);
})
.catch((error) => {
// Maneja errores
console.error("Fetch error:", error);
});

Uso óptimo de Fetch con ejemplo real

Ejemplo de cómo usar Fetch de manera óptima para obtener datos de una API con async y await:

async function useFetchGood() {
try {
const response = await fetch("https://pokeapi.co/api/v2/pokemon/");
if (!response.ok) {
throw new Error("Network response was not ok");
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Fetch error:", error);
}
}

Uso teórico de Fetch con envio de datos a la API y respuesta(necesita api_key)

Ejemplo teórico de cómo usar Fetch con método POST, enviando datos y devolviendo una respuesta de la APi con async y await:

async function useFetchWithKey() {
try {
const response = await fetch("https://es.libretranslate.com/translate", {
method: "POST",
body: JSON.stringify({
q: "hello world!",
source: "en",
target: "es",
format: "text",
api_key: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
}),
headers: { "Content-Type": "application/json" },
});
if (!response.ok) {
throw new Error("Network response was not ok");
} else {
const data = await response.json();
console.log(data);
}
} catch (error) {
console.error("Fetch error:", error);
}
}

Headers

En el contexto de la función fetch en JavaScript, los headers son parte de la configuración de la solicitud HTTP que defines para comunicarte con un servidor. Los headers contienen información adicional sobre la solicitud o sobre el cliente que realiza la solicitud, como el tipo de contenido que se envía o acepta, las credenciales de autenticación, o cualquier información personalizada necesaria para que el servidor procese correctamente la solicitud.

¿Cómo funcionan los headers?

  • Los headers se envían como un objeto en la configuración de la solicitud fetch.
  • Se utilizan para transmitir metadatos sobre la solicitud o para indicar preferencias del cliente.

Ejemplo básico de uso de headers en fetch:

fetch("https://api.ejemplo.com/datos", {
method: "GET", // Método HTTP (GET, POST, PUT, DELETE, etc.)
headers: {
"Content-Type": "application/json", // Especifica el tipo de contenido que se está enviando
Authorization: "Bearer token123", // Cabecera de autenticación
"Custom-Header": "valor-personalizado", // Cabecera personalizada
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));

Ejemplos comunes de headers

  1. Content-Type: Indica el tipo de contenido enviado al servidor.

    • Ejemplo: 'Content-Type': 'application/json'.
  2. Authorization: Envía tokens o credenciales para autenticación.

    • Ejemplo: 'Authorization': 'Bearer token123'.
  3. Accept: Indica el tipo de contenido que el cliente espera recibir.

    • Ejemplo: 'Accept': 'application/json'.
  4. User-Agent: Identifica el software cliente que hace la solicitud.

  5. Cache-Control: Controla cómo se gestionan las cachés.

    • Ejemplo: 'Cache-Control': 'no-cache'.
  6. Custom Headers: Puedes definir tus propias cabeceras para fines específicos.

    • Ejemplo: 'X-Custom-Header': 'MiValor'.

Importancia de los headers

  • Autenticación: Permiten enviar tokens (por ejemplo, OAuth).
  • Seguridad: Añaden medidas como el manejo de CORS (Cross-Origin Resource Sharing).
  • Personalización: Adaptan la solicitud a las necesidades del servidor.
  • Formato de datos: Especifican qué formato se usa para enviar y recibir datos (JSON, XML, etc.).

En resumen, los headers son un componente crucial de las solicitudes HTTP, y su configuración adecuada asegura que la comunicación entre el cliente y el servidor sea clara y efectiva.

Resumen

Fetch es una herramienta esencial para cualquier desarrollador web moderno, ya que proporciona una forma elegante y potente de trabajar con solicitudes y respuestas HTTP. Su enfoque basado en promesas y su capacidad para manejar solicitudes asincrónicas la hacen ideal para trabajar con APIs y construir aplicaciones web dinámicas.