Pros y contras de WSDL vs REST

108

Relacionado:

¿Por qué usar REST en lugar de servicios web?

Al decidir si implementar un servicio web usando SOAP o REST (por lo que me refiero a HTTP / XML de manera REST), ¿qué debo tener en cuenta y en qué debo estar pensando? Supongo que esta no es una talla única para todos, así que, ¿cómo elijo cuál usar?

Howard mayo
fuente
Esta pregunta también puede tener algunas respuestas útiles: stackoverflow.com/questions/90451/…
Rob Hruska
2
Depende del contexto, tanto SOAP como REST tienen su lugar. Normalmente no ve Hi-SOAP y lo-SOAP como oye hablar de REST. La razón por la que está allí es una especificación, y la sigue o no. SOAP encuentra su uso en centros de datos donde necesita interoperabilidad entre diferentes servidores que no pueden comunicarse directamente y el rendimiento es un factor importante. En esos casos, es bueno hacer SOAP sobre TCP. SOAP fue diseñado como una independencia de transporte, por lo que esencialmente debería poder usarlo sobre TCP, MSMQ, etc., REST solo se ocupa de HTTP.
Srikar Doddi
CodeToGlory tiene razón. De hecho, WCF de Microsoft fue diseñado específicamente para hacer que SOAP sobre cualquier medio de transporte sea tan fácil como un valor en un archivo de configuración.
Travis Heseman
Posible duplicado de SOAP vs REST (diferencias)
Hedeshy

Respuestas:

111

Los dos protocolos tienen usos muy diferentes en el mundo real.

SOAP (que utiliza WSDL) es un estándar XML de gran peso que se centra en el paso de documentos. La ventaja de esto es que sus solicitudes y respuestas pueden estar muy bien estructuradas e incluso pueden usar un DTD. La desventaja es que es XML y es muy detallado. Sin embargo, esto es bueno si dos partes necesitan tener un contrato estricto (por ejemplo, para la comunicación interbancaria). SOAP también le permite colocar elementos como WS-Security en sus documentos. SOAP generalmente es independiente del transporte, lo que significa que no es necesario utilizar HTTP.

REST es muy ligero y se basa en el estándar HTTP para hacer su trabajo. Es genial tener un servicio web útil en funcionamiento rápidamente. Si no necesita una definición de API estricta, este es el camino a seguir. La mayoría de los servicios web entran en esta categoría. Puede versionar su API para que las actualizaciones de la API no la rompan para las personas que usan versiones antiguas (siempre que especifiquen una versión). REST esencialmente requiere HTTP y es independiente del formato (lo que significa que puede usar XML, JSON, HTML, lo que sea).

Generalmente uso REST, porque no necesito funciones sofisticadas de WS- *. Sin embargo, SOAP es bueno si desea que las computadoras comprendan su servicio web mediante un WSDL. Las especificaciones de REST generalmente son solo legibles por humanos.

Kekoa
fuente
5
@JohnSaunders ¿Por qué hay sobres si no hay documento? No creo haber dicho que un DTD es una característica única de SOAP. Realmente no estoy de humor para debatir hoy, lo siento. Tal vez vuelva a leer los comentarios a su respuesta a esta pregunta de hace casi 3 años. No creo que el peso pesado sea necesariamente algo malo, a veces quieres a Holyfield, pero otras veces Pacquiao hace el trabajo. No lo tome a mal, y nada personal :)
Kekoa
1
SOAP funciona con interfaces de estilo de documento o de estilo RPC. Además, SOAP no usa DTD en absoluto, según mi leal saber y entender. Y nunca cuantificaste "peso pesado". Lo siento, acabo de ver tu respuesta, o habría votado en contra hace tres años.
John Saunders
2
@JohnSaunders ¡No hay problema, que tengas un buen día!
Kekoa
2
REST, como SOAP, es independiente del protocolo. No se basa en HTTP, aunque se usa más comúnmente de esa manera. Creo que un hecho importante que a menudo no se menciona es que SOAP vs REST está comparando un protocolo estándar w3c con un patrón arquitectónico pragmático poco definido.
joelmdev
1
@ jm2 Nunca he visto el resto usado fuera de HTTP. Me interesaría ver cómo los verbos GET / POST / PUT / DELETE / etc. trabajar en un "protocolo" de descanso sin HTTP. ¿Enlace?
Kekoa
33

Los siguientes enlaces proporcionan información útil sobre WSDL vs REST, incluidos los pros y los contras

Un par de puntos clave son que

1) SOAP fue diseñado para un entorno informático distribuido donde REST fue diseñado para un entorno punto a punto.

2) WADL se puede utilizar para definir la interfaz para los servicios REST.

http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and -wadl

Howard mayo
fuente
3
REST fue diseñado para sistemas distribuidos: "[...] el estilo arquitectónico Representational State Transfer (REST) ​​para sistemas hipermedia distribuidos [...]" (Fielding, 2000) ics.uci.edu/~fielding/pubs/dissertation/ rest_arch_style.htm
Thomas Eizinger
19

Con respecto a WSDL (que significa "SOAP") como "pesado". ¿Pesado importa cómo? Si el conjunto de herramientas está haciendo todo el "trabajo pesado" por usted, ¿por qué es importante?

Todavía nunca he necesitado consumir una API REST complicada. Cuando lo haga, espero que desee un WSDL, que mis herramientas convertirán con gusto en un conjunto de clases de proxy, por lo que puedo llamar a lo que parecen ser métodos. En cambio, sospecho que para consumir una API basada en REST no trivial, será necesario escribir a mano una cantidad sustancial de código "ligero".

Incluso cuando todo esté hecho, aún habrá traducido la documentación legible por humanos a código, con todo el riesgo que conlleva que los humanos la lean mal. Dado que WSDL es una descripción legible por máquina del servicio, es mucho más difícil "leerlo mal".


Sólo una nota: dado que este post, han tenido la oportunidad de trabajar con un servicio REST moderadamente complicado. De hecho, deseaba un WSDL o el equivalente y, de hecho, tenía que escribir mucho código a mano. De hecho, una parte sustancial del tiempo de desarrollo se dedicó a eliminar la duplicación de código de todo el código que llamaba a diferentes operaciones de servicio "a mano".

John Saunders
fuente
Creo que "ligero" se trata de rendimiento, digamos, por ejemplo, cargar términos de búsqueda sugeridos mientras escribe. Soy un tipo .NET y realmente aprecio algunas características IDE similares a lo que dices (las clases de proxy generadas automáticamente) pero para un REST ws. ¿Tal cosa existe?
Romias
1
El ejemplo que sugiere es un servicio REST simple, y probablemente difícil de "leer mal". Además, cualquier persona que sienta que SOAP tiene un peor rendimiento debe respaldarlo con números. No he tenido la impresión de que eso es de lo que estaban hablando los fans de REST cuando dicen "peso pesado".
John Saunders
3
El peso pesado no es despectivo, solo quise decir que SOAP te da mucho y tiene un precio un poco de rendimiento y complejidad. En el boxeo, un peso pesado probablemente puede hacer más daño que un peso ligero, pero un peso ligero puede hacer el trabajo en momentos en que no se requiere un peso pesado. Además, las "cosas" adicionales como WS-Security o Transactions introducen una complejidad adicional que REST simplemente no tiene.
Kekoa
3
"respalde eso con números" - flamebait clásico. Soy fanático de ambos, pero ninguno es igual para todos.
Kekoa
4
@kekoav: Estaba respondiendo a Romias diciendo que pensaba que "peso ligero" se trataba de rendimiento. Sentí que debería ser respaldado por cualquiera que se sienta así. Además, nuevamente, no asumiría un mejor desempeño sin medirlo, y no mediría, por ejemplo, transacciones versus ninguna transacción, o WS-Security versus HTTPS. No es un cebo de llamas sugerir que se verifique una declaración.
John Saunders
15

Esto probablemente pertenece como comentarios en varias de las publicaciones anteriores, pero aún no tengo el representante para hacerlo, así que aquí va.

Creo que es interesante que muchos de los pros y los contras que se mencionan a menudo para SOAP y REST tienen (IMO) muy poco que ver con los valores o límites reales de las dos tecnologías. Probablemente la ventaja más citada de REST es que es "liviana" o tiende a ser más "legible por humanos". En un nivel, esto es ciertamente cierto, REST tiene una barrera de entrada más baja: hay menos estructura requerida que SOAP (aunque estoy de acuerdo con aquellos que han dicho que las buenas herramientas son en gran medida la respuesta aquí; lástima que gran parte de las herramientas SOAP es bastante espantoso).

Sin embargo, más allá del costo de entrada inicial, creo que la impresión REST proviene de una combinación de la forma de las URL de solicitud y la complejidad de los datos intercambiados por la mayoría de los servicios REST. REST tiende a fomentar URL de solicitud más simples y legibles por humanos, y los datos también tienden a ser más digeribles. Sin embargo, ¿en qué medida son inherentes a REST y en qué medida son meramente accidentales? La estructura de URL más simple es un resultado directo de la arquitectura, pero podría aplicarse igualmente bien a los servicios basados ​​en SOAP. Es más probable que los datos más digeribles sean el resultado de la falta de una estructura definida. Esto significa que es mejor que mantenga sus formatos de datos simples o tendrá mucho trabajo. Así que aquí la estructura adicional de SOAP,

Entonces, para su uso en el intercambio de datos estructurados entre sistemas informáticos, no estoy seguro de que REST sea intrínsecamente mejor que SOAP (o viceversa), simplemente son diferentes. Creo que la comparación anterior de REST vs SOAP con la tipificación dinámica vs estática es buena. Donde los lenguajes dinámicos tienden a tener problemas es en el mantenimiento a largo plazo y el mantenimiento de un sistema (y a largo plazo no estoy hablando de un año o 2, estoy hablando de 5 o 10). Será interesante ver si REST se enfrenta a los mismos desafíos a lo largo del tiempo. Tiendo a pensar que así será, así que si estuviera construyendo un sistema de procesamiento de información distribuido, gravitaría hacia SOAP como el mecanismo de comunicación (también debido a las capas de protocolo de transmisión y aplicación y la flexibilidad que ofrece, como se mencionó anteriormente).

En otros lugares, aunque REST parece más apropiado. AJAX entre el cliente y su servidor (independientemente de la carga útil) es un ejemplo importante. No me importa mucho la longevidad de este tipo de conexión y la facilidad de uso y la flexibilidad son mínimas. De manera similar, si necesitaba acceso rápido a algún servicio externo y no pensé que me iba a importar la mantenibilidad de la interacción a lo largo del tiempo (nuevamente, supongo que aquí es donde REST terminará costándome más, de una manera u otro), entonces podría elegir DESCANSO solo para poder entrar y salir rápidamente.

De todos modos, ambas son tecnologías viables y, dependiendo de las compensaciones que desee realizar para una aplicación determinada, pueden servirle bien (o mal).

sfitts
fuente
5

REST no es un protocolo; Es un estilo arquitectónico. O un paradigma si quieres. Eso significa que está mucho más flexible definido que SOAP. Para CRUD básico, puede apoyarse en protocolos estándar como Atompub, pero para la mayoría de los servicios tendrá más comandos que eso.

Como consumidor, SOAP puede ser una bendición o una maldición, según el idioma que se soporte. Dado que SOAP se basa en gran medida en un sistema de tipo estricto, funciona mejor con lenguajes de tipo estático. Para un lenguaje dinámico, puede volverse fácilmente grosero y superfluo. Además, el soporte de la biblioteca cliente no es tan bueno fuera del mundo de Java y .NET

troelskn
fuente
¿Existe alguna razón válida para un soporte deficiente de herramientas fuera de Java y .NET? ¿Falta algo en el archivo WSDL que impida, digamos, que se cree un proxy Ruby?
John Saunders
Técnicamente no, pero alguien tiene que implementarlo, y ni Sun (lo siento, Oracle) ni Microsoft van a pagar a nadie para implementar bibliotecas cliente en Ruby. El protocolo SOAP es bastante complejo. Agregue a eso el hecho de que toda la complejidad está en el sistema de tipos, que es simplemente basura desde una perspectiva de lenguaje dinámico. Entonces, puede decir que SOAP fuerza los sistemas de tipos estáticos sobre los lenguajes dinámicos. REST es al revés.
troelskn
4

Para mí, debemos tener cuidado cuando usamos la palabra servicio web. Siempre debemos especificar si estamos hablando de servicio web SOAP, servicio web REST u otro tipo de servicios web porque estamos hablando de cosas diferentes aquí y la gente ya no entiende si los nombramos servicios web a todos.

Básicamente, los servicios web SOAP están muy bien establecidos durante años y siguen una especificación estricta que describe cómo comunicarse con ellos en función de la especificación SOAP. Ahora los servicios web REST son un poco más nuevos y básicamente parecen más simples porque no utilizan ningún protocolo de comunicación. Básicamente, lo que envía y recibe cuando usa un servicio web REST es XML simple. A las personas les gusta porque pueden analizar el xml de la forma que quieran sin tener que lidiar con un protocolo de comunicación más sofisticado como SOAP.

Para mí, los servicios REST son casi como si crearas un servlet en lugar de un servicio web SOAP. El servlet obtiene datos y los devuelve. El formato de los datos está basado en xml. También podemos imaginar usar algo más que xml si queremos. Por ejemplo, las etiquetas podrían usarse en lugar de xml y eso ya no sería REST sino otra cosa (podría ser incluso más liviano en términos de peso porque xml no es liviano por naturaleza). ¿Lo llamaríamos todavía un servicio web? Sí, podríamos, pero eso no seguirá ningún estándar actual y este es el problema principal aquí si comenzamos a llamar a todo servicios web, pero podemos hacerlo de la manera que queremos, entonces estamos perdiendo en el lado de la interoperabilidad de las cosas. Eso significa que el formato de los datos que se intercambian con el servicio web ya no está estandarizado.

Lo que a la gente no le gusta de SOAP es que les cuesta entenderlo y no pueden generar las consultas manualmente. Sin embargo, las computadoras pueden hacer eso muy bien, así que aquí es donde debemos ser claros: ¿se supone que las consultas y respuestas de los servicios web deben ser utilizadas directamente por los usuarios finales o estamos de acuerdo en que los servicios web están debajo de la API llamada por los sistemas informáticos basados ​​en algunos estándares normalizados? estándares?

Laize Laville
fuente
1
¿Eso ya no sería DESCANSO?
Steven Shaw
3

SOAP : también se puede transportar a través de SMTP, lo que significa que podemos invocar el servicio utilizando el formato de texto simple de correo electrónico también

Necesita un marco / motor adicional que debe estar en la máquina del consumidor de servicios web para convertir el mensaje SOAP en la estructura de los objetos respectivos en varios idiomas.

REST : Ahora WSDL2.0 admite la descripción del servicio web REST también

Podemos usarlo cuando desee que su servicio sea lo más liviano, por ejemplo, llamando desde dispositivos móviles como teléfono celular, pda, etc.

Jenith Michael Raj
fuente
Gracias por mencionar esto, @Jenith. Nadie parece querer sacar a relucir esto. WSDL tiene que ver con la descripción. REST es un paradigma. Para otros: consulte la Introducción en ibm.com/developerworks/webservices/library/ws-restwsdl . La pregunta original, por lo tanto (considerando su fecha de entrada), muestra que el título de la pregunta está mal elegido (probablemente tenga WSDL 1.0 en mente).
Sonny
3

para los sistemas empresariales en los que su sistema está confinado dentro de sus corporaciones, es más fácil y apropiado usar jabón porque casi tiene el control de los clientes. es más fácil ya que hay una variedad de herramientas que crean clases (proxies) y parece que está haciendo su OOP regular que coincide con su entorno java o .net (en el que usan la mayoría de las empresas).

Usaría REST para aplicaciones de Internet para exponer interfaces (como twitter api) ya que los clientes pueden usar javascripts o html u otros en los que escribir no es estricto. REST ser más liberal tiene más sentido.

También para los clientes que se enfrentan a Internet (world wide web), es más fácil analizar json o xml que sale de una interfaz de descanso en lugar de un xml puramente procedente de una interfaz de jabón. es difícil usar proxies en javascript y javascript, naturalmente, no admite objetos. Si está usando REST con javascript, generalmente analizaría la cadena json y listo. Las interfaces de acceso a Internet suelen ser muy simples (por lo que la mayoría de las veces es un análisis simple) y no suelen exigir coherencia, por eso REST es lo suficientemente adecuado.

Para aplicaciones empresariales, no creo que REST sea adecuado porque las transacciones, la seguridad, la tipificación estricta, los esquemas juegan un papel muy importante en el desarrollo de aplicaciones empresariales, por eso SOAP es más adecuado para ellas.

Mi conclusión es que SOAP es para sistemas empresariales, REST es para Internet o WWW. Puede usarlo indistintamente, pero es posible que tenga dificultades al no usar la herramienta correcta para el trabajo.

Perdón por mi mal ingles.

monte
fuente
2

En defensa de REST sigue de cerca los principios de HTTP y direccionabilidad, por ejemplo, las operaciones de lectura usan GET, las operaciones de actualización usan POST, etc. Creo que este es un enfoque mucho más limpio. El libro RESTful Web Services de Oreilly explica esto mucho mejor que yo, si lo lees, creo que preferirías el enfoque REST.

Nick Allen
fuente
1

El conjunto de herramientas del lado del cliente sería uno. Y la familiaridad con los servicios SOAP el otro. Cada vez más servicios siguen la ruta RESTful en estos días, y la prueba de dichos servicios se puede hacer con simples ejemplos de cURL. Aunque, no es tan difícil implementar ambos métodos y permitir la mayor utilización por parte de los clientes.

Si necesita elegir uno, le sugiero DESCANSO, es más fácil.

ahanson
fuente
1

Las respuestas anteriores contienen mucha información, pero creo que hay una diferencia filosófica que no se ha señalado. SOAP fue la respuesta a "¿cómo crear un sucesor moderno, orientado a objetos, independiente de la plataforma y del protocolo de RPC?". REST se desarrolló a partir de la pregunta, "¿cómo podemos tomar los conocimientos que hicieron que HTTP fuera tan exitoso para la web y usarlos para la computación distribuida?"

SOAP se trata de brindarle herramientas para hacer que la programación distribuida se vea como ... programación. REST intenta imponer un estilo para simplificar las interfaces distribuidas, de modo que los recursos distribuidos puedan referirse entre sí como las páginas html distribuidas pueden referirse entre sí. Una forma de hacerlo es intentar (principalmente) restringir las operaciones a "CRUD" en los recursos (crear, leer, actualizar, eliminar).

REST es todavía joven, aunque está orientado a servicios "legibles por humanos", no descarta los servicios de introspección, etc. o la creación automática de proxies. Sin embargo, estos no se han estandarizado (mientras escribo). SOAP te da estas cosas, pero (en mi humilde opinión) te da "sólo" estas cosas, mientras que el estilo impuesto por REST ya está fomentando la difusión de los servicios web debido a su simplicidad. Yo mismo animaría a los proveedores de servicios novatos a elegir REST a menos que existan características específicas proporcionadas por SOAP que deban usar.

En mi opinión, entonces, si está implementando una API "greenfield" y no sabe mucho acerca de posibles clientes, elegiría REST ya que el estilo que fomenta tiende a ayudar a que las interfaces sean comprensibles y fáciles de desarrollar. Sin embargo, si sabe mucho sobre el cliente y el servidor, y existen herramientas SOAP específicas que facilitarán la vida a ambos, entonces no sería religioso acerca de REST.

Shaunc
fuente
-1: esto en realidad no responde a la pregunta. Dice poco o nada sobre "¿por qué debería elegir uno sobre el otro"?
John Saunders
1
Me estaba concentrando en brindar información que otros no hicieron, pero agregué una conclusión dada su sugerencia.
shaunc
0

Puede realizar una transición sencilla de sus componentes web WCF que emiten WSDL a otros usos con solo cambiar los valores de configuración. Puede ir a través de HTTP y luego también canalizaciones con nombre, tcp, protocolos personalizados, etc.sin tener que cambiar su código. Creo que los componentes WCF también pueden ser más fáciles de configurar para cosas como seguridad, llamadas bidireccionales, transacciones, simultaneidad, etc.

REST prácticamente te limita a HTTP (que está bien en muchos casos).

Tad Donaghe
fuente
0

Sé que esta discusión es antigua, pero después de leer todas las respuestas y comentar, creo que todos se perdieron el punto más importante sobre la diferencia entre los 2 sistemas: SOAP usa tipos complejos no solo para brindarle los datos, sino para validar y manténgalo en la designación de tipo estricta para la que fue definido. Un WSDL le dice cuál es el formato de datos, cuál es el tipo de datos, le permite agregar reglas de estilo de patrón reg-ex y define cuántas veces un dato debe y puede estar permitido en una solicitud / respuesta . El descanso, por otro lado, no tiene ninguno de estos mecanismos.

SOAP es complejo y pesado porque le permite enviar datos jerárquicos complejos y pesados. REST es texto sin formato, con el origen y el punto final ordenando las reglas.

SOAP es independiente del negocio, porque tiene todas las reglas de datos integradas en el documento.

La diferencia entre SOAP y REST es que SOAP es un esquema orientado a negocios autónomo. REST es un documento de texto.

CrazyMerlin
fuente