🌐 ¿Qué son los Servicios Web?
Los servicios web son como "enchufes" que permiten que diferentes aplicaciones se comuniquen entre sí a través de internet, sin importar en qué lenguaje de programación estén escritas o en qué sistema operativo se ejecuten.
Imagina que tienes una aplicación de clima en tu teléfono. Esa app NO genera el pronóstico del tiempo, sino que se conecta a un servicio web de una empresa meteorológica que le proporciona esos datos. Ese "puente de comunicación" es un servicio web.
Características Principales
Interoperabilidad
Funcionan independientemente del lenguaje de programación
Accesibilidad
Disponibles a través de internet o redes
Reutilización
Un mismo servicio puede usarse en múltiples aplicaciones
Seguridad
Implementan protocolos estándar de seguridad
📡 REST API - API RESTful
REST significa REpresentational State Transfer (Transferencia de Estado Representacional).
Es un estilo arquitectónico para diseñar servicios web que usa el protocolo HTTP de forma simple y eficiente.
REST es como un "menú de restaurante" donde cada plato (recurso) tiene un nombre claro y puedes pedirlo de diferentes formas: verlo (GET), ordenarlo (POST), modificarlo (PUT) o cancelarlo (DELETE).
Principios de REST
- 🔗 Cliente-Servidor: Separación clara entre quien pide (cliente) y quien responde (servidor)
- 🚫 Sin Estado: Cada petición es independiente, el servidor no recuerda peticiones anteriores
- 📦 Recursos: Todo es un recurso identificado por una URL (ej:
/api/libros/) - 🎭 Métodos HTTP: Usa GET, POST, PUT, DELETE para realizar operaciones
- 📄 Formato JSON: Los datos se envían en formato JSON (legible y liviano)
Métodos HTTP en REST
| Método | Acción | Ejemplo |
|---|---|---|
GET |
Obtener datos | GET /api/libros/ → Lista todos los libros |
POST |
Crear nuevo recurso | POST /api/libros/ → Crea un libro nuevo |
PUT |
Actualizar completo | PUT /api/libros/1/ → Actualiza libro ID 1 |
PATCH |
Actualizar parcial | PATCH /api/libros/1/ → Modifica campos específicos |
DELETE |
Eliminar recurso | DELETE /api/libros/1/ → Elimina libro ID 1 |
Ventajas de REST
- ✅ Simple y fácil de entender - URLs claras y métodos HTTP estándar
- ✅ Ligero - JSON es más pequeño que XML
- ✅ Escalable - Sin estado, fácil de escalar horizontalmente
- ✅ Compatible - Funciona en navegadores, apps móviles, etc.
- ✅ Cacheable - Mejora rendimiento con caché HTTP
🧼 SOAP - Simple Object Access Protocol
SOAP significa Simple Object Access Protocol (Protocolo Simple de Acceso a Objetos).
Es un protocolo (conjunto de reglas estrictas) para intercambiar información estructurada usando XML.
SOAP es como enviar una carta formal con un formato muy específico: debe tener remitente, destinatario, sobre oficial, y todo en un orden preciso. Es más complejo que REST pero más robusto para transacciones críticas.
Características de SOAP
- 📜 Basado en XML: Todos los mensajes son documentos XML estructurados
- 📋 WSDL: Tiene un "contrato" (WSDL) que describe exactamente qué operaciones están disponibles
- 🔒 Seguridad avanzada: Soporta WS-Security para encriptación y autenticación
- ⚙️ Protocolo neutro: Puede usar HTTP, SMTP, TCP, etc.
- 🎭 Operaciones formales: Define métodos como funciones con entrada/salida específica
Estructura de un Mensaje SOAP
Un mensaje SOAP tiene 4 partes principales:
- Envelope (Sobre): Contenedor principal del mensaje
- Header (Cabecera): Información opcional (autenticación, etc.)
- Body (Cuerpo): Datos reales del mensaje
- Fault (Error): Si algo sale mal, aquí va el error
<soap:Envelope>
<soap:Body>
<obtener_libro>
<libro_id>1</libro_id>
</obtener_libro>
</soap:Body>
</soap:Envelope>
Ventajas de SOAP
- ✅ Seguridad robusta - WS-Security para transacciones críticas
- ✅ Transacciones ACID - Garantiza consistencia de datos
- ✅ Contrato formal (WSDL) - Documentación automática precisa
- ✅ Manejo de errores robusto - Sistema de fallos estructurado
- ✅ Usado en empresas - Estándar en banca, gobierno, etc.
⚖️ REST vs SOAP - Comparación
| Característica | REST | SOAP |
|---|---|---|
| Tipo | Estilo arquitectónico | Protocolo estricto |
| Formato de datos | JSON (principalmente), XML | XML únicamente |
| Complejidad | 🟢 Simple y fácil | 🟡 Complejo y formal |
| Velocidad | 🚀 Rápido (JSON liviano) | 🐌 Más lento (XML pesado) |
| Seguridad | HTTPS básico | WS-Security avanzado |
| Estado | Sin estado (stateless) | Con o sin estado |
| Caché | ✅ Soporta caché HTTP | ❌ No soporta caché |
| Uso común | Apps web, móviles, APIs públicas | Banca, gobierno, sistemas legacy |
| Documentación | Manual (Swagger/OpenAPI) | Automática (WSDL) |
| Protocolo | Solo HTTP/HTTPS | HTTP, SMTP, TCP, JMS |
¿Cuándo usar cada uno?
Usa REST si...
- Necesitas simplicidad
- App web o móvil
- Quieres velocidad
- API pública
- Recursos limitados
Usa SOAP si...
- Alta seguridad requerida
- Transacciones ACID
- Sistema empresarial
- Integración legacy
- Contrato formal necesario
🐳 Docker Desktop - Contenedores para Desarrollo
Docker Desktop es una aplicación que te permite crear, ejecutar y gestionar contenedores en tu computadora de forma fácil.
Imagina que Docker es como una "caja mágica" donde puedes meter una aplicación completa (código, base de datos, servidor web) y funcionará exactamente igual en cualquier computadora. Es como llevar tu casa completa en una maleta portátil.
¿Qué es un Contenedor?
Un contenedor es como una "caja aislada" que contiene:
- 🎯 Tu aplicación
- 📚 Todas sus dependencias (librerías)
- ⚙️ Configuración necesaria
- 🌐 Su propio sistema operativo mini
Si tu aplicación fuera un videojuego, el contenedor sería la consola portátil completa (Nintendo Switch). Llevas todo lo necesario: el juego, los controles, la pantalla. No importa dónde estés, funcionará igual.
¿Por qué usar Docker en este proyecto?
- ✅ Mismo entorno para todos - Tu proyecto funcionará igual en tu PC, la del profesor, y en producción
- ✅ Configuración automática - MySQL, Django, Nginx ya configurados y listos
- ✅ Sin conflictos - No interfiere con otras instalaciones en tu computadora
- ✅ Despliegue rápido - Todo el sistema listo con un solo comando
- ✅ Simula producción - Arquitectura profesional de microservicios
- ✅ Fácil de resetear - Borra y recrea todo en segundos si algo sale mal
Componentes de Docker Desktop
Contenedores
Aplicaciones aisladas ejecutándose
Imágenes
"Plantillas" para crear contenedores
Docker Compose
Orquesta múltiples contenedores
Docker Hub
Tienda de imágenes pre-hechas
Docker en Nuestro Proyecto
En nuestro sistema de biblioteca, Docker gestiona 4 contenedores que trabajan juntos:
| Contenedor | Función | Puerto |
|---|---|---|
| 🗄️ MySQL | Base de datos | 3306 |
| 🐍 Django | Aplicación web (REST + SOAP) | 8000 |
| 🌐 Nginx | Servidor web y balanceador | 80 |
| 🔴 Redis | Caché (opcional) | 6379 |
Con solo escribir
docker-compose up, todos estos 4 contenedores se levantan automáticamente y funcionan juntos. ¡Eso es el poder de Docker!
📬 Postman - Testing de APIs
Postman es una herramienta profesional para probar, desarrollar y documentar APIs de forma visual e interactiva.
Postman es como un "teléfono especial" para hablar con APIs. En lugar de escribir código complicado para probar tu API, usas una interfaz gráfica donde haces clic en botones, llenas formularios y ves las respuestas de forma clara.
¿Por qué usar Postman?
- ✅ Visual e intuitivo - No necesitas escribir código para probar APIs
- ✅ Pruebas rápidas - Envía peticiones y ve respuestas al instante
- ✅ Soporta REST y SOAP - Funciona con ambos tipos de servicios web
- ✅ Colecciones organizadas - Guarda todas tus pruebas ordenadas
- ✅ Historial completo - Revisa todas las peticiones anteriores
- ✅ Exportar/Importar - Comparte colecciones con tu equipo o profesor
- ✅ Estándar de la industria - Usado por millones de desarrolladores
Funcionalidades Principales
Enviar Peticiones
GET, POST, PUT, DELETE con un clic
Colecciones
Organiza tus APIs en carpetas
Inspector
Ve headers, body, respuestas JSON/XML
Variables
Reutiliza URLs y tokens fácilmente
Tests
Automatiza pruebas con scripts
Documentación
Genera docs automáticas de tu API
Postman en Nuestro Proyecto
En el proyecto de biblioteca, usaremos Postman para:
🔷 Para REST API:
- Probar GET
/api/libros/→ Ver todos los libros - Probar POST
/api/libros/→ Crear un libro nuevo - Probar PUT
/api/libros/1/→ Actualizar libro - Probar DELETE
/api/libros/1/→ Eliminar libro - Usar filtros:
?search=garcía,?categoria=1
🔷 Para SOAP:
- Importar WSDL automáticamente
- Generar peticiones XML de forma visual
- Probar operaciones:
obtener_libro,crear_prestamo - Ver respuestas XML formateadas y coloreadas
Con Postman puedes demostrar que tu API funciona correctamente sin escribir ni una línea de código adicional. Solo haces clic, envías, y ves los resultados en pantalla completa con colores y formato legible.
Flujo de Trabajo con Postman
- Crear Workspace: Espacio de trabajo para tu proyecto
- Crear Colección: "Biblioteca API - REST" y "Biblioteca API - SOAP"
- Agregar Requests: Una petición por cada endpoint
- Configurar Headers: Content-Type, Authorization, etc.
- Enviar Datos: Body en JSON (REST) o XML (SOAP)
- Ver Respuestas: Status code, JSON/XML, tiempo de respuesta
- Guardar y Exportar: Compartir con el profesor o equipo
🐍 Django - Framework Web
Django es un framework web de Python que te permite crear aplicaciones web complejas de forma rápida y segura.
"The web framework for perfectionists with deadlines" (El framework web para perfeccionistas con fechas límite)
Componentes de Django
Models (Modelos)
Definen la estructura de la base de datos
Views (Vistas)
Lógica que procesa las peticiones
Templates
HTML dinámico para mostrar datos
URLs
Enrutamiento de peticiones
Admin Panel
Panel de administración automático
Auth
Sistema de usuarios y permisos
Por qué Django para este Proyecto
- ✅ ORM poderoso - Trabaja con MySQL sin escribir SQL
- ✅ Admin automático - Panel de administración listo para usar
- ✅ Django REST Framework - Facilita crear APIs REST
- ✅ Compatible con Spyne - Para servicios SOAP
- ✅ Seguridad incluida - Protección contra CSRF, XSS, SQL injection
- ✅ Escalable - Usado por Instagram, Pinterest, NASA
🏗️ Arquitectura del Proyecto
┌─────────────────────────────────────────────────────────┐
│ 🌐 NAVEGADOR WEB / POSTMAN │
│ (Usuario interactúa con el sistema) │
└────────────────────┬────────────────────────────────────┘
│
▼
┌───────────────────────┐
│ 🌐 NGINX (Puerto 80) │ ← Balanceador de carga
│ Servidor web │ y servidor estático
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 🐍 DJANGO WEB #1 │ │ 🐍 DJANGO WEB #2 │ ← Escalable
│ (Puerto 8000) │ │ (Puerto 8001) │ horizontalmente
│ │ │ │
│ 📡 REST API │ │ 📡 REST API │
│ 🧼 SOAP Service │ │ 🧼 SOAP Service │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 🗄️ MySQL DB │ │ 🔴 Redis Cache │
│ (Puerto 3306) │ │ (Puerto 6379) │
│ Datos │ │ Sesiones │
└─────────────────┘ └─────────────────┘
Flujo de una Petición REST
- Usuario hace petición GET a
/api/libros/desde navegador o Postman - Nginx recibe la petición en puerto 80
- Nginx enruta la petición a uno de los contenedores Django
- Django procesa: consulta MySQL, aplica filtros, serializa datos
- Django devuelve JSON con la lista de libros
- Nginx retorna la respuesta al cliente
- Navegador/Postman muestra el JSON
Flujo de una Petición SOAP
- Cliente SOAP envía XML a
/soap/ - Spyne (en Django) recibe y valida el XML
- Ejecuta la operación solicitada (ej:
obtener_libro) - Consulta la base de datos MySQL
- Genera respuesta XML con los datos
- Retorna el XML al cliente
- Cliente SOAP parsea y muestra los datos
📝 Resumen Final
| Concepto | Qué es | Para qué sirve |
|---|---|---|
| Servicios Web | Sistemas que permiten comunicación entre aplicaciones | Integrar diferentes sistemas independientemente del lenguaje |
| REST API | Estilo arquitectónico simple usando HTTP y JSON | Crear APIs modernas, rápidas y escalables |
| SOAP | Protocolo formal con XML para mensajes estructurados | Transacciones críticas con alta seguridad |
| Django | Framework web de Python completo y robusto | Desarrollo rápido de aplicaciones web seguras |
| Docker | Plataforma de contenedores para aislar aplicaciones | Despliegue consistente en cualquier entorno |
| Postman | Herramienta visual para probar APIs | Testing profesional de REST y SOAP |
✅ Objetivos Logrados con el Proyecto
- ✅ Comprender qué son los servicios web y cómo funcionan
- ✅ Implementar una API REST completa con Django REST Framework
- ✅ Crear un servicio SOAP funcional con Spyne
- ✅ Usar Docker para contenerizar toda la aplicación
- ✅ Probar APIs profesionalmente con Postman
- ✅ Desplegar el sistema en producción (GitHub + PythonAnywhere)
- ✅ Entender las diferencias entre REST y SOAP
- ✅ Aplicar conocimientos de bases de datos con MySQL