Cuando hablamos de servicios web utilizados por un PAC (Proveedor Autorizado de Certificación), nos encontramos con dos tipos principales: los que ofrecen servicios REST y los que usan SOAP. Entender sus diferencias es crucial para elegir la opción que mejor se adapte a tus necesidades.
¿Qué es REST o RESTful como WebService?
Definición y Características
REST (Transferencia de Estado Representacional) se caracteriza por su facilidad de implementación y modificación, brindando visibilidad y portabilidad entre plataformas. Las API que siguen el estilo arquitectónico de REST se denominan API REST, y los servicios web que implementan esta arquitectura son llamados servicios web RESTful.
Ventajas de REST
- Flexibilidad: Permite diferentes formatos de datos (JSON, XML, texto plano).
- Rendimiento: Mejor escalabilidad y almacenamiento en caché.
- Facilidad de Uso: No requiere herramientas costosas ni lenguajes de programación específicos.
¿Qué es SOAP como WebService?
Definición y Características
SOAP (Protocolo de Acceso a Objetos Simples, por sus siglas en inglés: Simple Object Access Protocol) es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML.
Ventajas de SOAP
- Estandarización y Complejidad: SOAP impone reglas estrictas y estándares integrados que garantizan la fiabilidad de las operaciones, aunque esto también aumenta la complejidad y la sobrecarga.
- Operaciones con Nombre: SOAP se enfoca en acceder a operaciones específicas, cada una implementando una lógica de negocios particular.
- Confiabilidad: Los estándares de cumplimiento integrados forman un conjunto de propiedades que garantizan operaciones confiables, especialmente en la interacción con bases de datos.
Uso de WSDL
El uso de SOAP en un servicio web específico se describe mediante la definición de WSDL (Web Services Description Language), que especifica la interfaz que el servicio web expone a los clientes.
Diferencias
- WSDL define el esquema entre el cliente y el servicio y es estático por su naturaleza.
- SOAP construye un protocolo basado en XML sobre HTTP o, a veces, TCP / IP.
- SOAP es un sucesor de XML-RPC y es muy similar, pero describe una forma estándar de comunicación.
- Varios lenguajes de programación tienen soporte nativo para SOAP, normalmente necesita de una URL de servicio web y puede llamar a sus funciones de web service sin la necesidad de un código específico.
- REST permite muchos formatos de datos diferentes, mientras que SOAP solo permite XML. Uno de los formatos más utilizados y recomendado es el formato JSON. JSON es más ligero y transmite menos bytes en el intercambio de datos. REST permite un mejor soporte para los clientes del navegador debido a su soporte para JSON.
- REST tiene mejor rendimiento y escalabilidad. Las lecturas REST se pueden almacenar en caché; las lecturas basadas en SOAP no se pueden almacenar en caché.
- No se requiere de ninguna herramienta costosa para interactuar con el servicio web. Incluso en lenguajes de programación antiguos se puede hacer la comunicación a través de un HTTP.
- Eficiente (SOAP usa XML para todos los mensajes, REST puede usar formatos de mensajes más pequeños como son texto plano, HTML, XML, JSON etc.).
- Rápido (no requiere procesamiento extenso).
Ejemplo de Request-Response
Tomando como ejemplo un consumo de WebService para la obtención del token, tenemos los siguientes casos.
Request
POST http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: "http://sufacturacion.com/AutenticarBasico" Content-Length: 402 Host: pruebascfdi.smartweb.com.mx Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5) <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:suf="http://sufacturacion.com/"> <soapenv:Header/> <soapenv:Body> <suf:AutenticarBasico> <!--Optional:--> <suf:usuario>demo</suf:usuario> <!--Optional:--> <suf:password>123456789</suf:password> </suf:AutenticarBasico> </soapenv:Body> </soapenv:Envelope>
Response
HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri, 23 Feb 2023 16:28:40 GMT Content-Length: 1313 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <AutenticarBasicoResponse xmlns="http://sufacturacion.com/"> <AutenticarBasicoResult>T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUTQyWFhnTUxGYjdKdG8xQTZWVjFrUDNiOTVrRkhiOGk3RHladHdMaEM0cS8rcklzaUhJOGozWjN0K2h6R3gwQzF0c0g5aGNBYUt6N2srR3VoMUw3amtvPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxtMVdoaHdsM2JrVE9uTXJuZmpIYkVablgvK2lrRDlPYy9XanViRjNhb3h6Z0hBbDF1eDM4dXFiKzhsRG5saXdpaXpieVFtdjJEWUp5YjB6b3Zwc05kTnM4bVl5anhCQ21UNSt2N29YU1B2QVAwaXJXeU55YjRoVzE3OC83NVJlWWFVdmFzcGFaSjMvZTBiT3dSeTBzazg9.ux9Wx968vjlsY7HXR0j-JtZjvDRwm8na9Yn5A0AumI4</AutenticarBasicoResult> </AutenticarBasicoResponse> </soap:Body> </soap:Envelope>
Request
POST http://services.test.sw.com.mx/security/authenticate HTTP/1.1 Content-Type: application/json user: demo password: 123456789 Content-Length: 0 cache-control: no-cache User-Agent: PostmanRuntime/7.4.0 Accept: */* Host: services.test.sw.com.mx accept-encoding: gzip, deflate Connection: keep-alive
Response
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Vary: Accept-Encoding Server: Kestrel X-Powered-By: ASP.NET Date: Fri, 23 Feb 2023 16:30:08 GMT Content-Length: 1018 { "data": { "token": "T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUTQyWFhnTUxGYjdKdG8xQTZWVjFrUDNiOTVrRkhiOGk3RHladHdMaEM0cS8rcklzaUhJOGozWjN0K2h6R3gwQzF0c0g5aGNBYUt6N2srR3VoMUw3amtvPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxpZHRBczZIVFRnRUhhaFR5WW1KUndIZmNYWWRIamg5SnVIWFFJSmFUTDNsVFNKQVJUZUQyTUFNWnhUeVJaMUhhQUQ1aHZvZ2I5M0pBRUNlQ0pCL2VsVlVKM1VZUHQwcThYWlE2Tm9kbjlpT0xVR05IdXFpeTNDdGh2cktBdFB1YjhuUGZtMFRmUHVSdUpDNGYrNHhzRVk9.42C9cyxIrlkMMPvrZAwRMRyp84t8ag-kC2N2EJ_Ft_w", "expires_in": 1542997809, "tokeny_type": "Bearer" }, "status": "success" }
En SOAP tenemos 402 bytes como request y 1313 como response, lo que nos dejaría con un total de 1715 bytes transmitidos en un tiempo de 193 ms.
En REST tenemos 0 bytes como request y 1018 bytes como response, lo que nos deja con un total de 1018 bytes, transmitidos en un tiempo de 87 ms.
Señalar, que en este ejemplo el SOAP solo recibe el token y a través del servicio REST se envían datos adicionales, como un timestamp, y el tipo de token.
Conclusiones
SOAP
- Tiempo de Procesamiento: 2-15 segundos para emisión de una factura.
- Carga del Servicio: Mayor saturación con aumento de usuarios.
REST
- Tiempo de Procesamiento: 100ms – 1 segundo para emisión de una factura.
- Escalabilidad: Fácilmente escalable con más instancias en la nube.
Para la emisión de facturas electrónicas, REST se destaca por su rapidez y escalabilidad. SOAP, aunque más robusto en términos de estándares, puede volverse lento con el aumento de la carga del servicio.
En SW® somos mejores para TI, es por ello que tu opinión es muy importante, por favor ayúdanos calificando este articulo y dejando tus comentarios.