Patrón repositorio en JavaScript para centralizar peticiones al API
Clase 11 de 17 • Curso de API REST con Javascript
Resumen
Centraliza las peticiones al API con un patrón repositorio en JavaScript para evitar cambios dispersos, mejorar pruebas y depurar con precisión. Aquí verás cómo crear una clase, integrar fetch y usar el debugger del navegador para inspeccionar datos en tiempo real.
¿Por qué usar el patrón repositorio en JavaScript con fetch y API?
El patrón repositorio permite encapsular la lógica de acceso a datos en una clase única. Si el API cambia (por ejemplo, el campo pasa de id a identificador), actualizas una sola pieza de código y todo sigue funcionando.
- Centralización de llamadas al endpoint.
- Menos duplicación y menos errores.
- Cambios controlados ante evoluciones del API.
- Mejor testabilidad y mantenibilidad.
- Cohesión con programación orientada a objetos: clase, constructor, instancia y encapsulación.
¿Qué problema resuelve exactamente?
- Cambios de contrato del API sin tocar múltiples archivos.
- Reutilización de métodos como getProducts en distintas vistas.
- Un solo lugar para manejar response, JSON y errores.
¿Qué conceptos clave aparecen?
- Vanilla JavaScript y HTML sin framework.
- Objeto global del DOM: window.
- Prototipo de clases: en el prototype vive el método getProducts.
- Depuración con debugger, breakpoints y panel sources.
¿Cómo implementar ProductRepository y centralizar la URL del API?
Creamos un archivo en js: repositories.js. Definimos una clase que recibe la URL base del API y expone un método asíncrono para obtener productos desde el endpoint products.
// js/repositories.js
class ProductRepository {
constructor(url) {
this.url = url; // URL base del API (sin slash final).
}
async getProducts() {
const response = await fetch(`${this.url}/products`);
const responseData = await response.json();
return responseData; // Retorna datos en JSON.
}
}
// Exponer una instancia global para uso en el navegador.
// Asegúrate de pasar la URL sin slash final para evitar "//".
window.productRepository = new ProductRepository("https://tu-api.com");
Integramos el script en el template (después de los auxiliares como mockdata):
<!-- index.html -->
<script src="./js/mockdata.js"></script>
<script src="./js/repositories.js"></script>
- La URL debe ir sin el slash final para evitar doble concatenación con /products.
- Al cargar la página, tendrás disponible en window la instancia: window.productRepository.
- Esto habilita un punto único de acceso a productos, categorías u otras entidades que agregues.
¿Cómo se usa desde la consola?
- Crea una referencia:
const repo = window.productRepository
. - Llama al método:
await repo.getProducts()
. - Obtendrás un arreglo de productos listo para pintar en tu template.
¿Cómo depurar con el debugger del navegador y breakpoints?
Abrir las DevTools y usar el panel sources te permite pausar la ejecución, inspeccionar variables y entender cada paso del fetch.
- Abre sources y localiza js/repositories.js.
- Coloca un breakpoint dentro de getProducts.
- En la consola:
const repo = window.productRepository
. - Ejecuta:
await repo.getProducts()
y la ejecución se pausará. - Inspecciona
response
yresponseData
para verificar estructura y valores.
¿Qué habilidades prácticas aplicas?
- Uso de await en la consola del navegador.
- Inspección de objetos anidados:
responseData[4].images[0]
para acceder a la primera imagen del quinto producto. - Corrección rápida de propiedades: diferenciar
images
deimage
al explorar datos. - Continuación de la ejecución tras una pausa y observación de la respuesta del endpoint.
¿Qué beneficios obtienes al depurar así?
- Entiendes el flujo real antes de pintar datos en el template.
- Detectas contratos del API y nombres de campos con precisión.
- Ajustas el repositorio sin tocar componentes de UI.
¿Te gustaría que mostremos cómo pintar los productos en el template con el verbo GET y buenas prácticas de renderizado? Comparte tus dudas y retos en los comentarios.