SOAP XML es un protocolo de comunicación que se usa para intercambiar información estructurada entre aplicaciones a través de redes, principalmente servicios web.
Con esta capacidad, Vor-Tex no solo permite producir y gestionar APIs REST sino también integraciones basadas en APIs con protocolo SOAP/XML, lo que agrega flexibilidad, versatilidad, ampliando las distintas soluciones.
Exponer métodos SOAP permite reducir fricciones en la actualización y modernización de sistemas, cuando es necesario mantener esta forma de servicios web para reducir el impacto en los componentes de una organización.
En este documento, se explica como crear y configurar métodos SOAP/xml.
La selección de SOAP/XML en la plataforma de Vor-Tex, al igual que con REST y Websockets, se realiza a nivel de los métodos y no al nivel de las APIs. Es por eso, que una vez creada o seleccionada la API, se debe agregar un método y seleccionar la vista o pipeline que ejecutará dicho método, como se muestra a continuación.
Pantalla 2 - Seleccionar vista para el método.
Una vez creado el método y seleccionada la vista que ejecutará, se deben completar las especificaciones del método.
Es en esta instancia en la que se debe seleccionar el protocolo SOAP
Los métodos SOAP/xml solo admiten POST como tipo de solicitud. Al seleccionar el protocolo SOAP, aparecerán campos específicos que deben ser configurados:
WSDL (Web Services Description Language) es un XML que describe el servicio web y puede usarse para realizar verificaciones en las solicitudes al método.
El WSDL se define para cada método y puede contener una especificación en XSD (XML Schema Definition o Definición de Esquema XML) donde se definen validaciones sobre el contenido XML de la solicitud.
Supongamos que tenemos este body de solicitud que debe enviarse al método.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:fix="http://www.fixprotocol.org/FIXML-5-0">
<soapenv:Header/>
<soapenv:Body>
<fix:Employees>
<fix:Name Type="public">John</fix:Name>
<fix:Lastname Type="public">Doe</fix:Lastname>
<fix:BirhtDate Type="private">1986-01-31</fix:BirhtDate>
</fix:Employees>
</soapenv:Body>
</soapenv:Envelope>
Y esta es la repsuesta esperada en caso exitoso
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:fix="http://www.fixprotocol.org/FIXML-5-0">
<soapenv:Header/>
<soapenv:Body>
<fix:EmployeesResponse>
<fix:response>CREATED</fix:response>
</fix:EmployeesResponse>
</soapenv:Body>
</soapenv:Envelope>
Además, definimos ciertas reglas de validación del contenido del cuerpo de la solicitud.
Campo |
Tipo |
Restricciones |
Obligatorio |
Valor fijo en atributo Type |
Name |
string |
Máx 120 caracteres |
✅ Sí |
public |
Lastname |
string |
Máx 120 caracteres |
✅ Sí |
public |
BirthDate |
date |
Formato YYYY-MM-DD |
❌ No |
private |
Nuestro WSLD con el XSD embebido será el siguiente
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="EmployeesService"
targetNamespace="http://www.fixprotocol.org/FIXML-5-0"
xmlns:tns="http://www.fixprotocol.org/FIXML-5-0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<!-- ================== -->
<!-- Tipos (XSD embebido) -->
<!-- ================== -->
<wsdl:types>
<xs:schema targetNamespace="http://www.fixprotocol.org/FIXML-5-0"
xmlns="http://www.fixprotocol.org/FIXML-5-0"
elementFormDefault="qualified">
<xs:element name="Employees">
<xs:complexType>
<xs:sequence>
<xs:element name="Name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="nameType">
<xs:attribute name="Type" use="required" fixed="public"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Lastname">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="lastnameType">
<xs:attribute name="Type" use="required" fixed="public"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="BirhtDate" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="birthdateType">
<xs:attribute name="Type" use="required" fixed="private"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="nameType">
<xs:restriction base="xs:string">
<xs:maxLength value="120"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="lastnameType">
<xs:restriction base="xs:string">
<xs:maxLength value="120"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="birthdateType">
<xs:restriction base="xs:date"/>
</xs:simpleType>
<!-- Definición para la respuesta -->
<xs:element name="EmployeesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="response" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<!-- ================== -->
<!-- Mensajes -->
<!-- ================== -->
<wsdl:message name="EmployeesRequest">
<wsdl:part name="parameters" element="tns:Employees"/>
</wsdl:message>
<wsdl:message name="EmployeesResponseMessage">
<wsdl:part name="parameters" element="tns:EmployeesResponse"/>
</wsdl:message>
<!-- ================== -->
<!-- Operación -->
<!-- ================== -->
<wsdl:portType name="EmployeesPortType">
<wsdl:operation name="CreateEmployee">
<wsdl:input message="tns:EmployeesRequest"/>
<wsdl:output message="tns:EmployeesResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
<!-- ================== -->
<!-- Binding -->
<!-- ================== -->
<wsdl:binding name="EmployeesBinding" type="tns:EmployeesPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="CreateEmployee">
<soap:operation soapAction="http://www.fixprotocol.org/FIXML-5-0/CreateEmployee"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!-- ================== -->
<!-- Servicio -->
<!-- ================== -->
<wsdl:service name="EmployeesService">
<wsdl:port name="EmployeesPort" binding="tns:EmployeesBinding">
<soap:address location="http://localhost:8080/employees"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
De esta forma Vor-Tex permite exponer métodos de tipo SOAP/xml bajo los estándares definidos para ese tipo de métodos, facilitando la integración entre sistemas.