Capítulo 11: Buenas Prácticas
11.1. Centralizar llamadas a APIs (módulos)
// api.js - Módulo centralizado para todas las peticiones
const API_BASE = "https://api.example.com";
// Configuración global
const defaultOptions = {
headers: {
"Content-Type": "application/json"
}
};
// Función base para todas las peticiones
async function apiCall(endpoint, opciones = {}) {
const url = `${API_BASE}${endpoint}`;
const config = {
...defaultOptions,
...opciones,
headers: {
...defaultOptions.headers,
...opciones.headers
}
};
try {
const respuesta = await fetch(url, config);
// Manejo centralizado de errores HTTP
if (!respuesta.ok) {
const error = new Error();
error.status = respuesta.status;
error.statusText = respuesta.statusText;
throw error;
}
return await respuesta.json();
} catch (error) {
console.error(`Error en ${endpoint}:`, error);
throw error;
}
}
// Funciones específicas (abstractas)
const usuarios = {
obtenerTodos: () => apiCall("/usuarios"),
obtenerPor: (id) => apiCall(`/usuarios/${id}`),
crear: (datos) => apiCall("/usuarios", {
method: "POST",
body: JSON.stringify(datos)
}),
actualizar: (id, datos) => apiCall(`/usuarios/${id}`, {
method: "PUT",
body: JSON.stringify(datos)
}),
eliminar: (id) => apiCall(`/usuarios/${id}`, {
method: "DELETE"
})
};
const posts = {
obtenerTodos: () => apiCall("/posts"),
obtenerPorUsuario: (userId) => apiCall(`/posts?userId=${userId}`),
crear: (datos) => apiCall("/posts", {
method: "POST",
body: JSON.stringify(datos)
})
};
// Exportar
export { usuarios, posts };Uso desde la aplicación:
11.2. Manejo consistente de errores
Uso:
11.3. Separar lógica de datos de renderizado
11.4. Testing de código asíncrono
11.5. Evitar antipatrones comunes
❌ Antipatrón 1: Múltiples await secuenciales sin necesidad
❌ Antipatrón 2: No manejar rechazos
❌ Antipatrón 3: Mezclar .then() y async/await
❌ Antipatrón 4: No limpiar recursos
Resumen del Capítulo
💡 Conceptos Clave:
🤔 Preguntas de Reflexión:
AnteriorCapítulo 10: Patrones AvanzadosSiguienteCapítulo 12: Proyecto Integrador - Dashboard de Películas
Última actualización
¿Te fue útil?