Integración con backend: conectando con el mundo real
BorradorURL: https://ruvebal.github.io/web-atelier-udit/lessons/es/react/react-backend-integration/
📋 Tabla de contenidos
- 🎯 Objetivo del sprint
- 📍 Posición en el viaje
- 🧭 Objetivos de aprendizaje
- 🏗️ Qué construiremos este sprint
- 🔧 Opciones de integración
- 🎓 Metodología: práctica atelier
- 📝 Entregables del sprint
- 🔗 Navegación de la lección
- 📚 Vista previa: conceptos clave
“Un frontend sin backend es una pintura sin galería: hermosa, pero invisible.”
🎯 Objetivo del sprint
Al finalizar este sprint: tu app habla con fuentes de datos reales—obtiene, cachea y muta datos desde APIs de Laravel, Hygraph CMS u otros backends con patrones de nivel profesional.
📍 Posición en el viaje
| Sprint | Enfoque | Tu app crece |
|---|---|---|
| 7. Arquitectura | Estado global | Features conectadas |
| 8. Routing | Navegación | Estructura multipágina |
| → 9. Backend | Data fetching | Datos reales, app real |
| 10. Auth | Seguridad | Sesiones de usuario |
🧭 Objetivos de aprendizaje
Al final de esta lección:
- Harás fetch de datos con Fetch API y async/await
- Gestionarás estados loading, error y empty de forma elegante
- Implementarás React Query para caché y sincronización
- Harás mutaciones (POST, PUT, DELETE) y optimistic updates
- Integrarás endpoints REST de Laravel
- (Opcional) Consultarás Hygraph GraphQL
🏗️ Qué construiremos este sprint
Arquitectura de capa API
// Separación limpia de responsabilidades:
src/
├── api/
│ ├── client.js // Wrapper de Axios o fetch
│ ├── endpoints.js // Constantes de URL
├── hooks/
│ ├── useProducts.js // React Query para productos
│ ├── useUser.js // React Query para usuario
│ └── useMutations.js // Create, update, delete
└── components/
└── ProductList.jsx // Usa useProducts
🔧 Opciones de integración
Elige una o más según tu proyecto:
Opción A: Laravel REST API
// Endpoints típicos en Laravel
const API = {
products: '/api/products',
product: (id) => `/api/products/${id}`,
auth: '/api/auth/login',
user: '/api/user',
};
// Uso con React Query
const { data: products } = useQuery({
queryKey: ['products'],
queryFn: () => fetch(API.products).then(r => r.json())
});
Opción B: Hygraph GraphQL
// Query GraphQL
const PRODUCTS_QUERY = `
query Products {
products {
id
name
price
image { url }
}
}
`;
// Fetch desde Hygraph
const { data } = useQuery({
queryKey: ['products'],
queryFn: () => hygraphClient.request(PRODUCTS_QUERY)
});
Opción C: JSON local / Mock API
// Para desarrollo sin backend
const { data } = useQuery({
queryKey: ['products'],
queryFn: () => import('./data/products.json')
});
🎓 Metodología: práctica atelier
Ritmo del sprint
┌─────────────────────────────────────────────────────────┐
│ DÍA 1: Fundamentos de fetching │
│ • Configurar cliente API (Axios o wrapper fetch) │
│ • Patrón básico useQuery con React Query │
│ • Estados loading/error en UI │
├─────────────────────────────────────────────────────────┤
│ DÍA 2: Mutations y datos reales │
│ • Conectar con Laravel (coordinar con backend) │
│ • useMutation para create/update/delete │
│ • Optimistic updates para UX ágil │
├─────────────────────────────────────────────────────────┤
│ DÍA 3: Caché y edge cases │
│ • Configurar cacheTime y stale-while-revalidate │
│ • Gestionar offline (opcional) │
│ • Error boundaries para requests fallidos │
└─────────────────────────────────────────────────────────┘
Protocolo de desarrollo asistido por IA
| Tarea | Rol de la IA | Tu rol |
|---|---|---|
| Depurar errores API | Explicar CORS, 401, 500 | Ajustar config y reintentar |
| Generar tipos API | Inferir desde JSON | Validar y refinar |
| Diseñar loading states | Proponer skeleton/spinner | Encajar en tu design system |
| Optimizar queries | Proponer estrategia de caché | Probar invalidación |
📝 Entregables del sprint
- Cliente API con base URL y headers de auth
- 3+ hooks de fetching con React Query
- Loading states (skeletons o spinners)
- Manejo de errores con mensajes orientados a usuario
- 1 mutation (create/update/delete)
- Invalidación de caché tras mutaciones
- Reflexión: ¿cómo cambia tu app trabajar con datos async?
🔗 Navegación de la lección
| Anterior | Actual | Siguiente |
|---|---|---|
| Routing | Integración backend | Autenticación |
📚 Vista previa: conceptos clave
Contenido completo pendiente. Temas incluidos:
- Repaso Async/Await y Promises
- Fetch API vs Axios
- React Query: patrones esenciales
- Estrategias de caché
- Mutations y optimistic updates
- Error boundaries para async
- GraphQL con Apollo o urql (opcional)
- Type safety con respuestas API
“Los datos reales son desordenados. Tu trabajo es hacer que se sientan limpios.”