📚 Unidad 3 - Servicios Web

Información Completa sobre REST API, SOAP, Django y Herramientas

Servicios Web 2026 - Universidad Tecnológica de Hermosillo

🌐 ¿Qué son los Servicios Web?

💡 Definición Simple

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.

🎯 Ejemplo de la vida real:
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

🎯 ¿Qué es REST?

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.

📖 Explicación simple:
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

🎯 ¿Qué es SOAP?

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.

📖 Explicación simple:
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:

  1. Envelope (Sobre): Contenedor principal del mensaje
  2. Header (Cabecera): Información opcional (autenticación, etc.)
  3. Body (Cuerpo): Datos reales del mensaje
  4. Fault (Error): Si algo sale mal, aquí va el error
📝 Ejemplo visual de SOAP:
<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

🎯 ¿Qué es Docker Desktop?

Docker Desktop es una aplicación que te permite crear, ejecutar y gestionar contenedores en tu computadora de forma fácil.

📖 Explicación simple:
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
💡 Analogía perfecta:
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
🚀 Comando mágico:
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

🎯 ¿Qué es Postman?

Postman es una herramienta profesional para probar, desarrollar y documentar APIs de forma visual e interactiva.

📖 Explicación simple:
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
💡 Ventaja clave:
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

  1. Crear Workspace: Espacio de trabajo para tu proyecto
  2. Crear Colección: "Biblioteca API - REST" y "Biblioteca API - SOAP"
  3. Agregar Requests: Una petición por cada endpoint
  4. Configurar Headers: Content-Type, Authorization, etc.
  5. Enviar Datos: Body en JSON (REST) o XML (SOAP)
  6. Ver Respuestas: Status code, JSON/XML, tiempo de respuesta
  7. Guardar y Exportar: Compartir con el profesor o equipo

🐍 Django - Framework Web

🎯 ¿Qué es Django?

Django es un framework web de Python que te permite crear aplicaciones web complejas de forma rápida y segura.

📖 Lema de Django:
"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

📐 Diagrama Completo del Sistema
┌─────────────────────────────────────────────────────────┐
│                🌐 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

  1. Usuario hace petición GET a /api/libros/ desde navegador o Postman
  2. Nginx recibe la petición en puerto 80
  3. Nginx enruta la petición a uno de los contenedores Django
  4. Django procesa: consulta MySQL, aplica filtros, serializa datos
  5. Django devuelve JSON con la lista de libros
  6. Nginx retorna la respuesta al cliente
  7. Navegador/Postman muestra el JSON

Flujo de una Petición SOAP

  1. Cliente SOAP envía XML a /soap/
  2. Spyne (en Django) recibe y valida el XML
  3. Ejecuta la operación solicitada (ej: obtener_libro)
  4. Consulta la base de datos MySQL
  5. Genera respuesta XML con los datos
  6. Retorna el XML al cliente
  7. Cliente SOAP parsea y muestra los datos

📝 Resumen Final

🎯 Conceptos Clave de la Unidad 3
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