Servicios web SOAP: qué son y cómo funcionan
Los servicios web permiten que dos aplicaciones se comuniquen a través de una red, sin importar el lenguaje en que fueron escritas ni el sistema operativo en que corren. Dos de los enfoques más conocidos son SOAP y REST. En este repaso te explico qué es un servicio web, cómo funciona SOAP, cómo es un mensaje SOAP en XML, en qué se diferencia de REST y cuáles son los verbos HTTP más usados. Al final encontrarás preguntas de repaso tipo verdadero/falso.
¿Qué es un servicio web?
Un servicio web es un componente de software que ofrece funciones a otras aplicaciones a través de la red, normalmente usando el protocolo HTTP. Por ejemplo, una aplicación de una tienda puede consultar a un servicio web de un banco para validar un pago, o una app del clima puede pedir los datos a un servicio meteorológico.
Las características clave son:
- Interoperabilidad: un cliente en Python puede usar un servicio escrito en Java o en C#.
- Formatos estándar: los datos viajan en formatos de texto como XML o JSON.
- Acceso por red: se usan protocolos conocidos (HTTP/HTTPS).
¿Qué es SOAP?
SOAP (originalmente Simple Object Access Protocol) es un protocolo estandarizado para intercambiar mensajes estructurados. Sus rasgos principales:
- Los mensajes siempre se escriben en XML.
- Cada mensaje tiene una estructura fija: Envelope (sobre), un Header opcional y un Body con los datos.
- Los servicios se describen con un archivo WSDL (Web Services Description Language), que indica qué operaciones ofrece el servicio, qué parámetros reciben y qué devuelven.
- Normalmente viaja sobre HTTP con el método POST, aunque puede usar otros transportes.
- Cuenta con estándares adicionales para seguridad (WS-Security), transacciones y mensajería confiable, por eso se usa mucho en bancos, gobierno y sistemas empresariales.
Ejemplo de mensaje SOAP
Una solicitud para consultar la temperatura de una ciudad podría verse así:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cl="http://ejemplo.com/clima">
<soap:Header/>
<soap:Body>
<cl:ObtenerTemperatura>
<cl:ciudad>Ibagué</cl:ciudad>
</cl:ObtenerTemperatura>
</soap:Body>
</soap:Envelope>
Y la respuesta:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cl="http://ejemplo.com/clima">
<soap:Body>
<cl:ObtenerTemperaturaResponse>
<cl:grados>27</cl:grados>
</cl:ObtenerTemperaturaResponse>
</soap:Body>
</soap:Envelope>
(La dirección ejemplo.com y los valores son solo ilustrativos.) Si ocurre un error, el Body contiene un elemento Fault con el código y la descripción del problema.
¿Qué es REST?
REST (Representational State Transfer) no es un protocolo sino un estilo de arquitectura. En REST cada dato es un recurso identificado por una URL, y se manipula con los verbos del protocolo HTTP. Las respuestas suelen ir en JSON, aunque también pueden ser XML u otro formato.
Verbos HTTP más usados
| Verbo | Acción | Ejemplo |
|---|---|---|
| GET | Consultar | GET /estudiantes/15 |
| POST | Crear | POST /estudiantes |
| PUT | Actualizar (reemplazar) | PUT /estudiantes/15 |
| DELETE | Eliminar | DELETE /estudiantes/15 |
Ejemplo de respuesta REST en JSON
GET /clima/ibague
{
"ciudad": "Ibagué",
"grados": 27
}
Compara con el ejemplo SOAP: la misma información ocupa mucho menos texto.
SOAP frente a REST
| Aspecto | SOAP | REST |
|---|---|---|
| Tipo | Protocolo | Estilo de arquitectura |
| Formato | Solo XML | JSON, XML, texto… |
| Descripción | WSDL | Opcional (por ejemplo, OpenAPI) |
| Peso de los mensajes | Mayor | Menor |
| Estado | Puede manejar operaciones con estado | Sin estado (cada petición es independiente) |
| Uso típico | Banca, gobierno, sistemas empresariales | Apps web y móviles, APIs públicas |
Consumir un servicio REST desde Python
Para que veas lo sencillo que es, este ejemplo usa la biblioteca requests para hacer un GET y leer la respuesta JSON (la URL es ilustrativa):
import requests
r = requests.get("https://api.ejemplo.com/clima/ibague", timeout=10)
if r.status_code == 200:
datos = r.json()
print(datos["ciudad"], datos["grados"], "°C")
else:
print("Error:", r.status_code)
Los códigos de estado HTTP indican el resultado: 200 (correcto), 201 (creado), 404 (no encontrado), 500 (error del servidor). Para SOAP existen bibliotecas como zeep, que leen el WSDL y generan las llamadas automáticamente.
Errores comunes al estudiar el tema
- Creer que REST es un protocolo: es un estilo que se apoya en HTTP.
- Pensar que SOAP puede usar JSON: SOAP siempre usa XML.
- Confundir PUT con POST: POST crea un recurso nuevo; PUT reemplaza uno existente.
- Olvidar la seguridad: tanto SOAP como REST deben usarse sobre HTTPS cuando hay datos sensibles.
Preguntas de repaso (verdadero o falso)
- Un servicio web permite la comunicación entre aplicaciones escritas en lenguajes diferentes. Verdadero.
- SOAP utiliza XML para estructurar sus mensajes. Verdadero.
- REST obliga a usar XML. Falso: el formato más común es JSON.
- El verbo DELETE se usa para consultar un recurso. Falso: se usa GET; DELETE elimina.
- WSDL describe las operaciones de un servicio SOAP. Verdadero.
Preguntas frecuentes
¿SOAP está obsoleto?
No del todo. En proyectos nuevos se prefiere REST, pero SOAP sigue funcionando en muchos sistemas bancarios y gubernamentales.
¿Qué necesito para practicar?
Un lenguaje como Python y una herramienta para enviar peticiones HTTP. Empieza por qué es Python.
¿Los servicios web usan bases de datos?
Casi siempre: el servicio consulta una base de datos y devuelve el resultado. Si trabajas con MySQL, te puede servir la solución al error 1046.
Conclusión
SOAP es un protocolo formal basado en XML y WSDL, ideal para entornos empresariales con requisitos estrictos; REST es un estilo ligero basado en recursos y verbos HTTP, preferido para aplicaciones web y móviles. Conocer ambos te permite entender cómo se comunican casi todos los sistemas actuales.
.jpg)
Comentarios