Una API (Application Programming Interface) es un conjunto de reglas que permite que dos aplicaciones se comuniquen.
Un Web Service es una API que usa protocolos de internet (como HTTP, SMTP, etc.) para intercambio de información.
Durante muchos años, el formato más común de intercambio fue XML, especialmente en servicios basados en SOAP.
Hoy en día JSON es más usado en APIs REST, pero en entornos bancarios, gubernamentales y empresariales todavía SOAP con XML sigue vigente.
SOAP (Simple Object Access Protocol) es un protocolo basado en XML que define cómo enviar mensajes estructurados entre sistemas.
Cada mensaje SOAP tiene:
Ejemplo de solicitud (request):
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cli="http://ejemplo.com/clientes">
<soap:Header/>
<soap:Body>
<cli:getClienteRequest>
<cli:id>101</cli:id>
</cli:getClienteRequest>
</soap:Body>
</soap:Envelope>
Explicación:
<soap:Envelope>
: contenedor principal.<soap:Header>
: metadatos (por ejemplo, autenticación).<soap:Body>
: contiene la petición real (getClienteRequest
).cli
indica que pertenece al servicio de clientes.Ejemplo de respuesta (response):
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cli="http://ejemplo.com/clientes">
<soap:Body>
<cli:getClienteResponse>
<cli:cliente>
<cli:id>101</cli:id>
<cli:nombre>Ana</cli:nombre>
<cli:ciudad>Córdoba</cli:ciudad>
</cli:cliente>
<cli:getClienteResponse>
</soap:Body>
</soap:Envelope>
La respuesta envuelve los datos del cliente dentro del <soap:Body>
.
Un WSDL (Web Services Description Language) es un archivo XML que describe cómo interactuar con un servicio SOAP.
Es el manual que usan los clientes para consumir el servicio.
Ejemplo (simplificado):
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://ejemplo.com/clientes"
targetNamespace="http://ejemplo.com/clientes">
<message name="getClienteRequest">
<part name="id" type="xsd:int"/>
</message>
<message name="getClienteResponse">
<part name="cliente" type="tns:Cliente"/>
</message>
<portType name="ClientePortType">
<operation name="getCliente">
<input message="tns:getClienteRequest"/>
<output message="tns:getClienteResponse"/>
</operation>
</portType>
</definitions>
Aquí se define que la operación getCliente
recibe un id
y devuelve un Cliente
.
from zeep import Client
# Cargar el WSDL
client = Client("http://ejemplo.com/clientes?wsdl")
# Llamar a la operación getCliente
respuesta = client.service.getCliente(id=101)
print(respuesta)
La librería zeep
usa el WSDL para generar automáticamente las llamadas.
import javax.xml.ws.Service;
import java.net.URL;
import javax.xml.namespace.QName;
public class ClienteSOAP {
public static void main(String[] args) throws Exception {
URL wsdlURL = new URL("http://ejemplo.com/clientes?wsdl");
QName qname = new QName("http://ejemplo.com/clientes", "ClienteService");
Service service = Service.create(wsdlURL, qname);
ClientePort port = service.getPort(ClientePort.class);
Cliente cliente = port.getCliente(101);
System.out.println("Cliente: " + cliente.getNombre());
}
}
using System;
class Program {
static void Main() {
var cliente = new ClienteService.ClientePortClient();
var respuesta = cliente.getCliente(101);
Console.WriteLine("Cliente: " + respuesta.nombre);
}
}
En C#/.NET, el WSDL genera automáticamente clases y métodos equivalentes al servicio.
Por eso hoy REST/JSON es más popular en apps modernas, pero SOAP/XML sigue vigente en el mundo empresarial.
Un banco ofrece un Web Service SOAP para consultar el saldo de una cuenta:
Request
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getSaldoRequest xmlns="http://banco.com/servicios">
<numeroCuenta>123456</numeroCuenta>
</getSaldoRequest>
</soap:Body>
</soap:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getSaldoResponse xmlns="http://banco.com/servicios">
<saldo>10500.75</saldo>
<moneda>ARS</moneda>
</getSaldoResponse>
</soap:Body>
</soap:Envelope>