Este proyecto es una aplicación educativa que demuestra cómo crear un CRUD completo en ExtJS con llamadas a servicios REST.
Aplicación web que permite gestionar usuarios (crear, leer, actualizar y eliminar) conectándose a un servicio REST backend.
-
✅ CRUD Completo
- CREATE (POST) - Crear nuevos usuarios
- READ (GET) - Listar y buscar usuarios
- UPDATE (PUT) - Actualizar usuarios existentes
- DELETE (DELETE) - Eliminar usuarios
-
🎨 Interfaz Moderna
- Grid interactivo con columnas personalizadas
- Formularios con validación
- Iconos FontAwesome
- Feedback visual de operaciones
-
📚 Código Educativo
- Comentarios detallados en español
- Logs en consola para cada operación
- Estructura clara y organizada
-
Servidor REST Backend
- Debe estar corriendo en
http://localhost:8080 - Endpoint principal:
/api/users/search
- Debe estar corriendo en
-
Navegador Web Moderno
- Chrome, Firefox, Edge, Safari, etc.
- Con soporte para ES6+
front/
├── index.html # Página principal
├── app.js # Inicialización de la aplicación
├── app/
│ ├── model/
│ │ └── User.js # Modelo de datos de Usuario
│ ├── store/
│ │ └── Users.js # Store con configuración REST
│ └── view/
│ ├── UserGrid.js # Grid de usuarios (tabla)
│ └── UserForm.js # Formulario de usuario
└── README.md # Este archivo
-
Asegúrate de que tu servidor REST esté corriendo en
http://localhost:8080 -
Abre el archivo
index.htmldirectamente en tu navegador:Haz doble clic en index.html
Si tienes problemas de CORS, usa un servidor HTTP:
Con Python:
# Python 3
cd front
python -m http.server 8000
# Abre: http://localhost:8000Con Node.js:
# Instalar http-server globalmente
npm install -g http-server
# Ejecutar
cd front
http-server -p 8000
# Abre: http://localhost:8000Al cargar la página, automáticamente se ejecuta:
GET http://localhost:8080/api/users/searchRespuesta esperada:
[
{
"id": 1,
"nombre": "Juan Pérez",
"email": "juan@example.com",
"edad": 30
},
...
]Código relevante: app/store/Users.js (líneas 30-45)
- Haz clic en el botón "Nuevo Usuario"
- Completa el formulario
- Haz clic en "Guardar"
Petición:
POST http://localhost:8080/api/users
Content-Type: application/json
{
"nombre": "Ana García",
"email": "ana@example.com",
"edad": 28
}Código relevante: app/view/UserForm.js (método createUser)
- Haz doble clic en un usuario del grid
- Modifica los datos en el formulario
- Haz clic en "Guardar"
Petición:
PUT http://localhost:8080/api/users/1
Content-Type: application/json
{
"nombre": "Juan Pérez Modificado",
"email": "juan.nuevo@example.com",
"edad": 31
}Código relevante: app/view/UserForm.js (método updateUser)
- Haz clic en el icono de papelera (🗑️)
- Confirma la eliminación
Petición:
DELETE http://localhost:8080/api/users/1Código relevante: app/view/UserGrid.js (método deleteUser)
- Abre las Herramientas de Desarrollo (F12)
- Ve a la pestaña Console
- Verás logs detallados de cada operación:
✅ Datos cargados correctamente: 3 usuarios 📤 POST - Creando nuevo usuario: {nombre: "Ana", ...} ✅ Usuario creado exitosamente
- Abre las Herramientas de Desarrollo (F12)
- Ve a la pestaña Network
- Realiza operaciones CRUD
- Haz clic en cada petición para ver:
- Headers (cabeceras HTTP)
- Payload (datos enviados)
- Response (respuesta del servidor)
Define la estructura de datos:
Ext.define('Tutorial.model.User', {
extend: 'Ext.data.Model',
fields: ['id', 'nombre', 'email', 'edad']
});Gestiona la colección de datos y las peticiones REST:
Ext.define('Tutorial.store.Users', {
extend: 'Ext.data.Store',
model: 'Tutorial.model.User',
proxy: {
type: 'rest',
url: 'http://localhost:8080/api/users'
}
});Componente visual para mostrar datos en forma de tabla:
Ext.create('Ext.grid.Panel', {
store: usersStore,
columns: [...]
});Permite capturar y validar datos del usuario:
Ext.create('Ext.form.Panel', {
items: [
{xtype: 'textfield', name: 'nombre'},
{xtype: 'textfield', name: 'email'}
]
});Tu servicio REST debe implementar los siguientes endpoints:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/users/search |
Listar todos los usuarios |
| POST | /api/users |
Crear nuevo usuario |
| PUT | /api/users/{id} |
Actualizar usuario |
| DELETE | /api/users/{id} |
Eliminar usuario |
GET /api/users/search
[
{"id": 1, "nombre": "Juan", "email": "juan@example.com", "edad": 30}
]POST /api/users (201 Created)
{"id": 4, "nombre": "Ana", "email": "ana@example.com", "edad": 28}PUT /api/users/1 (200 OK)
{"id": 1, "nombre": "Juan Actualizado", "email": "juan@example.com", "edad": 31}DELETE /api/users/1 (204 No Content o 200 OK)
Problema: La consola muestra errores de CORS
Solución: Configura tu backend para permitir peticiones desde el origen del frontend:
// Spring Boot
@CrossOrigin(origins = "*")
@RestController
public class UserController { ... }Problema: El grid está vacío
Verificar:
- ¿El servidor REST está corriendo? →
http://localhost:8080/api/users/search - ¿La consola muestra errores?
- ¿La pestaña Network muestra la petición?
Problema: Las peticiones devuelven 404
Solución: Verifica que las URLs en app/store/Users.js coincidan con tu backend
- Agregar validación de edad mínima (18 años)
- Implementar un campo de teléfono en el modelo y formulario
- Añadir paginación real en el servidor
- Crear un filtro por rango de edad
- Agregar exportación a CSV/Excel
Este es un proyecto educativo. Siéntete libre de modificarlo y experimentar.
Proyecto educativo de uso libre.
¡Feliz aprendizaje! 🚀
Si tienes dudas, revisa los comentarios en el código fuente - están ahí para ayudarte a entender cada paso.