Descanso contra soap. ¿REST tiene un mejor rendimiento?

Leí algunas preguntas ya publicadas aquí con respecto a Soap and Rest y no encontré la respuesta que estoy buscando. Tenemos un sistema que se ha creado utilizando los servicios web de Soap. El sistema no es muy eficiente y está en discusión reemplazar todos los servicios web de Soap por los servicios web REST. Alguien ha argumentado que Rest tiene un mejor rendimiento. No sé si esto es verdad. (Esta fue mi primera pregunta). Suponiendo que esto sea cierto, ¿hay alguna desventaja al usar REST en lugar de Soap? (¿Estamos perdiendo algo?)

Gracias por adelantado.

El rendimiento es un tema amplio.

Si se refiere a la carga del servidor, REST tiene un rendimiento un poco mejor porque tiene una sobrecarga mínima sobre HTTP. Por lo general, SOAP trae consigo una stack de manejadores y analizadores (generados) diferentes. De todos modos, la diferencia de rendimiento en sí misma no es tan grande, pero el servicio RESTful es más fácil de ampliar ya que no tiene sesiones del lado del servidor.

Si se refiere al rendimiento de la red (es decir, el ancho de banda), REST tiene un rendimiento mucho mejor. Básicamente, es solo HTTP. Sin gastos generales Por lo tanto, si su servicio se ejecuta sobre HTTP de todos modos, no puede obtener mucho más delgado que REST. Además, si codifica sus representaciones en JSON (a diferencia de XML), ahorrará muchos más bytes.

En resumen, yo diría ‘sí’, serás más eficiente con REST. Además, (en mi opinión) hará que su interfaz sea más fácil de consumir para sus clientes. Por lo tanto, no solo su servidor se vuelve más delgado sino también el cliente.

Sin embargo, hay un par de cosas que considerar (ya que preguntaste ‘¿qué vas a perder?’):

Las interfaces RESTful tienden a ser un poco más “habladas”, por lo que dependiendo de su dominio y de cómo diseñe sus recursos, puede terminar haciendo más solicitudes HTTP.

SOAP tiene un soporte de herramientas muy amplio. Por ejemplo, a los consultores les encanta porque pueden usar herramientas para definir la interfaz y generar el archivo wsdl y a los desarrolladores les encanta porque pueden usar otro conjunto de herramientas para generar todo el código de red de ese archivo wsdl. Además, XML como representación tiene esquemas y validadores, que en algunos casos pueden ser un tema clave. (JSON y REST tienen cosas similares por venir, pero el soporte de la herramienta está muy por detrás)

SOAP requiere que se analice un mensaje XML y que se envíen y reciban todos los elementos extra .

REST generalmente usa algo mucho más escueto y fácil de analizar como JSON.

Sin embargo, en la práctica, la diferencia no es tan buena.

Construir un DOM a partir de XML suele ser una pieza de código superoptimizada y superrápida, como XERCES en C ++ o Java, mientras que la mayoría de los analizadores de JSON están en su propia categoría interpretada.

En un entorno de red rápido (LAN o banda ancha) no hay mucha diferencia entre enviar una o dos K ​​frente a 10 a 15 k.

Pronuncias la pregunta como si REST y SOAP fueran intercambiables de algún modo en un sistema existente. Ellos no son.

Cuando usa SOAP (una tecnología), generalmente tiene un sistema que está definido en ‘métodos’, ya que en realidad se trata de RPC.

Cuando utiliza REST (un estilo arquitectónico, no una tecnología), entonces está creando un sistema que está definido en términos de ‘recursos’ y no en absoluto en los métodos. No hay correspondencia 1: 1 entre SOAP y REST. La architecture del sistema es fundamentalmente diferente.

¿O simplemente está hablando de “RPC a través de URI”, que a menudo se confunde con REST?

Una cosa que las otras respuestas parecen pasar por alto es el soporte REST para el almacenamiento en caché y otros beneficios de HTTP. Si bien SOAP usa HTTP, no aprovecha la infraestructura de soporte de HTTP. El enlace SOAP 1.1 solo define el uso del verbo POST. Esto se corrigió con la versión 1.2 con la introducción de enlaces GET, sin embargo, esto puede ser un problema si se usa la versión anterior o si no se usan los enlaces apropiados.

La seguridad es otra preocupación clave del rendimiento. Las aplicaciones REST generalmente usan TLS u otros mecanismos de seguridad de capa de sesión. TLS es mucho más rápido que el uso de mecanismos de seguridad de nivel de aplicación como WS Security (WS Security también adolece de fallas de seguridad ).

Sin embargo, creo que estos son problemas menores cuando se comparan los servicios basados ​​en SOAP y REST. Puede encontrar soluciones para problemas de rendimiento de SOAP o REST. Mi opinión personal es que ni SOAP ni REST (por REST me refiero a los servicios REST basados ​​en HTTP) son apropiados para los servicios que requieren alto rendimiento y baja latencia. Para esos tipos de servicios, probablemente desee utilizar algo como Apache Thrift, 0MQ o la miríada de otros protocolos RPC binarios.

Definitivamente no soy un experto cuando se trata de SOAP vs REST, pero la única diferencia de rendimiento que conozco es que SOAP tiene una gran sobrecarga al enviar / recibir paquetes, ya que está basado en XML, requiere un encabezado SOAP, etc. REST usa el URL + querystring para hacer una solicitud, y por lo tanto no envía tantos kB sobre el cable.

Estoy seguro de que hay otras personas aquí en SO que pueden darte mejores y más detalladas respuestas, pero al menos lo intenté;)

Solo para agregar un poco a la respuesta de wuher.

Http Encabezado de bytes al solicitar esta página usando el navegador web Chrome: 761
Se requieren bytes para el mensaje de muestra de soap en el artículo de wikipedia : 299

Mi conclusión: no es el tamaño de los bytes en el cable lo que permite que REST funcione bien.

Es muy poco probable que simplemente la conversión de un servicio SOAP a REST obtenga beneficios de rendimiento significativos. La ventaja de REST es que si sigue las restricciones, puede aprovechar los mecanismos que HTTP proporciona para producir sistemas escalables. El almacenamiento en caché y el particionamiento son las herramientas en su toolbelt.

Todo depende. REST realmente no tiene una (buena) respuesta para la situación donde los datos de solicitud pueden volverse grandes. Siento este punto si a veces se pasa por alto cuando promociono REST.

Imaginemos un servicio que le permite solicitar datos informativos para miles de artículos diferentes.

El desarrollador de SOAP definiría un método que le permitiría recuperar la información para uno o tantos elementos como desee … en una sola llamada.

Al desarrollador de REST le preocuparía que su URI fuera demasiado largo para definir un método GET que tomaría un solo elemento como parámetro. Tendría que llamar esto varias veces, una vez por cada elemento, para obtener sus datos. Limpio y fácil de entender … pero.

En este caso, se necesitarían muchos más viajes de ida y vuelta para que el servicio REST logre lo que se puede hacer con una sola llamada en el servicio SOAP.

Sí, sé que hay soluciones para cómo manejar datos de solicitudes grandes en el escenario REST. Por ejemplo, puede empacar cosas en el cuerpo de su solicitud. Pero luego deberá definir cuidadosamente (tanto en el servidor como en el lado del cliente) cómo debe interpretarse esto. En estas situaciones, comienza a sentir el dolor de que REST no es realmente un estándar (como SOAP) sino más bien una manera de hacer las cosas.

Para situaciones donde solo se intercambia una cantidad relativamente limitada de datos, REST es una muy buena opción. Al final del día, esta es la mayoría de los casos de uso.

En general, se prefiere un servicio web basado en REST debido a su simplicidad, rendimiento, escalabilidad y soporte para múltiples formatos de datos. SOAP se ve favorecido cuando el servicio requiere soporte integral para seguridad y confiabilidad transaccional.

La respuesta realmente depende de los requisitos funcionales y no funcionales. Hacer las preguntas que figuran a continuación lo ayudará a elegir.

REf: http://java-success.blogspot.ca/2012/02/java-web-services-interview-questions.html

¿El servicio expone datos o lógica comercial? (RESTO es una mejor opción para exponer datos, SOAP WS podría ser una mejor opción para la lógica). ¿Los consumidores y los proveedores de servicios requieren un contrato formal? (SOAP tiene un contrato formal a través de WSDL) ¿Necesitamos admitir múltiples formatos de datos? ¿Necesitamos hacer llamadas AJAX? (REST puede usar XMLHttpRequest) ¿La llamada es síncrona o asíncrona? ¿Es la llamada con estado o sin estado? (REST es adecuado para operaciones sin estadísticas CRUD) ¿Qué nivel de seguridad se requiere? (SOAP WS tiene mejor soporte para la seguridad) ¿Qué nivel de soporte de transacciones se requiere? (SOAP WS tiene mejor soporte para la gestión de transacciones) ¿Tenemos ancho de banda limitado? (SOAP es más detallado) ¿Qué es lo mejor para los desarrolladores que crearán clientes para el servicio? (RESTO es más fácil de implementar, probar y mantener)

No tiene que elegir, los marcos modernos le permiten exponer los datos en esos formatos con un cambio mínimo. Siga los requisitos de su negocio y realice una prueba de carga de la implementación específica para comprender el rendimiento, no hay una respuesta correcta a esta pregunta sin la prueba de carga correcta de un sistema específico.