¿SOAP o REST?

Cuando hablamos de web service que un PAC utilice nos encontramos con 2 tipos, aquellos que ofrecen servicios REST y los que lo hacen por SOAP.
Un web service es una vía de intercomunicación e interoperabilidad entre interfaces a través de internet, un cliente manda una solicitud a un servidor, desencadenando una acción por parte de este. A continuación, el servidor devuelve una respuesta al cliente

¿Que es REST o RESTful como WebService?

REST se define como transferencia de estado representacional de las siglas en inglés (Representational State Transfer ).

REST no define tantos estándares como SOAP, puede ser implementado y modificado fácilmente, lo que brinda visibilidad y portabilidad entre plataformas a cualquier sistema de API. REST se enfoca en acceder a recursos nombrados a través de una única interfaz consistente. Las API que siguen el estilo arquitectónico de REST se llaman API REST. Los servicios web que implementan una arquitectura de REST son llamados servicios web RESTful.

RESTful hace referencia a un servicio web que implementa la arquitectura REST.

¿Que es SOAP como WebService?

SOAP se define como protocolo de acceso a objetos simples de las siglas en inglés (Simple Object Access Protocol)

Impone reglas integradas que aumentan la complejidad y la sobrecarga. SOAP se enfoca en acceder a operaciones con nombre, cada operación implementa alguna lógica de negocios. Los estándares de cumplimiento integrados incluidos forman un conjunto de propiedades que garantizan operaciones confiables de las bases de datos. El uso de SOAP en un servicio web específico se describe mediante la definición WSDL.

Diferencias

SOAP

SOAP

  • 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

REST

  • 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.

SOAP

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>

REST

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

Hablando en términos de un timbrado de facturas electrónicas tendríamos que considerar lo siguiente.

SOAP

Cuando enviemos datos estos serán procesados además del tiempo de envío y recepción, lo que nos dejará con un tiempo aproximado de 2-15 segundos para la emisión de una factura. En nuestro lenguaje de programación cuando obtengamos la respuesta del Servicio Web, necesitamos hacer el parseo de la respuesta a través de un DOM Document para obtener los datos importantes, lo cual suma un poco más de tiempo.

Cuando el Servicio Web se vuelva más popular, es probable que el servicio se sature cada vez más y esté se vuelva más lento.

REST

Cuando enviamos datos, solo enviaremos aquello que es importante, en cuestión de timbrado sería el XML, el cual se procesa de manera rápida (Hacer verificación de memoria caché para evitar un timbre duplicado), lo cual nos deja con tiempo de 100ms – 1 segundo para la emisión de una factura. En nuestro lenguaje de programación cuando obtengamos la respuesta hacemos el parseo del JSON (el cual es más rápido), lo cual nos suma unos pocos mili-segundos.

Cuando el Servicio Web se vuelva más popular, simplemente se añaden más instancias en la nube, así el trabajo se distribuye usando un balanceador de carga.

Consulta nuestra capsula tipSW®: Diferencias entre SOAP y REST ¿Cuál es mejor?


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.

How useful was this post?

Click on a star to rate it!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Updated on octubre 30, 2023

Related Articles