WSDL vs REST Pros y contras

Relacionado:

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

Al decidir si implementar un servicio web usando SOAP o REST (me refiero a HTTP / XML de manera RESTful) ¿de qué debería estar al tanto y en qué debería estar pensando? Supongo que no se trata de una talla única, ¿cómo puedo elegir cuál usar?

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

SOAP (utilizando WSDL) es un estándar XML pesado que se centra en la aprobación de documentos. La ventaja de esto es que sus solicitudes y respuestas pueden estar muy bien estructuradas, e incluso pueden usar una 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 cosas como WS-Security en sus documentos. SOAP generalmente es independiente del transporte, lo que significa que no necesariamente necesita usar HTTP.

REST es muy liviano y depende del estándar HTTP para hacer su trabajo. Es genial tener un servicio web útil y en funcionamiento rápidamente. Si no necesita una definición estricta de API, este es el camino a seguir. La mayoría de los servicios web caen 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 básicamente requiere HTTP, y es independiente del formato (lo que significa que puede usar XML, JSON, HTML, lo que sea).

En general, uso REST, porque no necesito funciones elegantes de WS- *. Sin embargo, SOAP es bueno si desea que las computadoras entiendan su servicio web utilizando un WSDL. Las especificaciones de REST generalmente solo son legibles para humanos.

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

Un par de puntos clave son

1) SOAP se diseñó para un entorno informático distribuido en el que REST se diseñó para un entorno punto a punto.

2) WADL se puede usar para definir la interfaz para 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

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

Nunca he necesitado consumir una API REST complicada. Cuando lo haga, espero que desearé un WSDL, que mis herramientas con mucho gusto convertirán en un conjunto de clases proxy, por lo que puedo simplemente 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 “liviano”.

Incluso cuando todo esté hecho, aún habrá traducido en código la documentación legible por el ser humano, con el consiguiente riesgo de que los humanos lo lean mal. Como WSDL es una descripción legible por máquina del servicio, es mucho más difícil “leerlo mal”.


Solo una nota: desde esta publicación, tuve la oportunidad de trabajar con un servicio REST moderadamente complicado. De hecho, deseé un WSDL o su equivalente, y de hecho tuve que escribir mucho código a mano. De hecho, una parte sustancial del tiempo de desarrollo se gastó eliminando la duplicación de código de todo el código que llamaba a las diferentes operaciones de servicio “a mano”.

Esto probablemente realmente pertenece como comentarios en varias de las publicaciones anteriores, pero todavía no tengo el representante para hacer eso, así que aquí va.

Creo que es interesante que muchos de los pros y contras citados a menudo para SOAP y REST tengan (IMO) muy poco que ver con los valores reales o los límites de las dos tecnologías. Probablemente el profesional más citado para REST es que es “liviano” o que tiende a ser más “legible por humanos”. En un nivel, esto es 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 una buena herramienta es en gran medida la respuesta aquí). Lástima que muchas de las herramientas de SOAP son bastante terrible).

Sin embargo, más allá de ese 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, y los datos tienden a ser más digeribles también. Sin embargo, hasta qué punto son inherentes a REST y en qué medida son meramente accidentales. La estructura de URL más simple es un resultado directo de la architecture, pero también podría aplicarse a los servicios basados ​​en SOAP. Los datos más digeribles es más probable que sean el resultado de la falta de una estructura definida. Esto significa que será mejor que mantenga sus formatos de datos simples o tendrá mucho trabajo. Entonces, aquí la estructura adicional de SOAP, que debería ser un beneficio, en realidad está permitiendo un diseño descuidado y ese diseño descuidado se usa como una defensa contra la tecnología.

Entonces, para usar 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 para la tipificación dinámica frente a la estática es buena. Donde los lenguajes dynamics tienden a correr en problemas es en el mantenimiento a largo plazo y el mantenimiento de un sistema (y por largo plazo, no estoy hablando de un año o 2, estoy hablando de 5 o 10). Será interesante ver si REST se encuentra con los mismos desafíos a lo largo del tiempo. Tiendo a pensar que así será si estuviera construyendo un sistema de procesamiento de información distribuido, me gustaría gravitar a SOAP como el mecanismo de comunicación (también debido a la transmisión y la estratificación del protocolo de aplicación y la flexibilidad que ofrece, como se ha mencionado anteriormente).

En otros lugares, REST parece más apropiado. AJAX entre el cliente y su servidor (independientemente de la carga útil) es un ejemplo importante. No tengo mucho cuidado con la longevidad de este tipo de conexión y la facilidad de uso y la flexibilidad están en un primer momento. De manera similar, si necesitaba acceso rápido a algún servicio externo y no pensé que iba a preocuparme por el mantenimiento de la interacción a lo largo del tiempo (supongo que es aquí donde REST va a terminar costándome más, de una manera u otro), entonces podría elegir REST 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, le pueden servir bien (o mal).

REST no es un protocolo; Es un estilo arquitectónico. O un paradigma si quieres. Eso significa que está mucho más 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 solo eso.

Como consumidor, SOAP puede ser una bendición o una maldición, dependiendo del soporte del idioma. Como SOAP está muy modelado en un sistema estrictamente tipado, funciona mejor con lenguajes tipados estáticamente. Para un lenguaje dynamic, puede volverse fácil y superfluo. Además, la compatibilidad cliente-biblioteca no es tan buena fuera del mundo de Java y .NET

Para mí deberíamos tener cuidado cuando usamos la palabra servicio web. Deberíamos especificar todo el tiempo si hablamos del servicio web SOAP, el servicio web REST u otro tipo de servicios web porque estamos hablando de cosas diferentes aquí y la gente ya no comprende si nombramos todos ellos servicios web.

Básicamente, los servicios web SOAP están muy bien establecidos desde hace años y siguen una estricta especificación que describe cómo comunicarse con ellos basándose en la especificación SOAP. Ahora los servicios web REST son un poco más nuevos y básicamente parecen más simples porque no están usando ningún protocolo de comunicación. Básicamente, lo que envía y recibe cuando usa un servicio web REST es XML simple. A la gente le gusta porque pueden analizar el xml de la forma que deseen 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 devuelve datos. El formato de los datos está basado en xml. También podemos imaginarnos usar algo más que xml si queremos. Por ejemplo, podrían usarse tags en lugar de xml, y eso ya no sería REST sino algo más (podría ser incluso más ligero en términos de peso porque xml no es ligero por naturaleza). ¿Llamaríamos a eso 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 todos los servicios web, pero podemos hacerlo de la manera que queremos, entonces estamos perdiendo 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. Eso requiere que el servidor y el cliente acuerden el formato de los datos, mientras que con SOAP esto ya está predefinido y el servidor y el cliente pueden interoperar sin conocerse porque siguen el mismo estándar.

Lo que a la gente no le gusta con SOAP es que tienen dificultades para entenderlo y no pueden generar las consultas manualmente. Sin embargo, las computadoras pueden hacerlo muy bien, así que debemos aclarar esto: ¿se supone que las consultas y respuestas de los servicios web serán utilizadas directamente por los usuarios finales o acordamos que los servicios web están debajo de la API llamada por sistemas informáticos basados ​​en estándares?

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 en la máquina de consumo del servicio web para convertir el mensaje SOAP a la estructura de objetos respectivos en varios idiomas.

RESTO : ahora WSDL2.0 es compatible para describir el servicio web REST también

Podemos usarlo cuando desee que su servicio sea liviano, por ejemplo, llamadas desde dispositivos móviles como teléfonos celulares, pda, etc.

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

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 la escritura no es estricta. RESTO siendo 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 reposo en lugar de un puramente xml que proviene de una interfaz de soap. es difícil usar proxies en javascript y javascript no admite objetos naturalmente. Si está utilizando REST con javascript, simplemente analizará la cadena json y estará desactivado. Las interfaces orientadas 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 lo que REST es lo suficientemente adecuado.

Para las aplicaciones empresariales, no creo que REST sea adecuado porque las transacciones, la seguridad, el tipado estricto y los esquemas juegan un papel muy importante en el desarrollo de aplicaciones empresariales, por lo que SOAP es más adecuado para ellos.

Mi conclusión es que SOAP es para sistemas Enterprise, REST es para Internet o WWW. Puede usarlo indistintamente, pero puede que tenga dificultades para no utilizar la herramienta correcta para el trabajo.

Perdón por mi mal ingles.

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. Considero que se trata de 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.

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

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

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 independiente, moderno, orientado a objetos, de plataforma y protocolo para RPC”. REST se desarrolló a partir de la pregunta “¿cómo tomar las ideas que hicieron que HTTP fuera tan exitoso para la web y usarlas para la informática distribuida?”

SOAP consiste en proporcionarle herramientas para que la progtwigción distribuida se parezca a … la progtwigción. REST intenta imponer un estilo para simplificar las interfaces distribuidas, de modo que los recursos distribuidos se puedan referir 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 aún es joven, aunque está orientado a los servicios de “lectura humana”, no descarta los servicios de introspección, etc. o la creación automática de proxies. Sin embargo, estos no han sido estandarizados (mientras escribo). SOAP te ofrece estas cosas, pero (en mi humilde opinión) te da “solo” 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 alentaría a los proveedores de servicios nuevos a elegir REST a menos que haya funciones específicas provistas por SOAP que necesiten usar.

En mi opinión, entonces, si está implementando una API “nueva” y no sabe mucho sobre 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. Si sabes mucho sobre el cliente y el servidor, y hay herramientas específicas de SOAP que harán las cosas más fáciles para ambas, entonces no sería religioso acerca de REST.

Puede hacer fácilmente la transición de sus componentes web de WCF que emiten WSDL a otros usos simplemente cambiando sus configuraciones. Puede navegar por HTTP y luego también llamar a pipes, 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, concurrencia, etc.

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

Sé que esta discusión es antigua, pero después de leer todas las respuestas y comentar, creo que todos olvidaron el punto más importante sobre la diferencia entre los dos sistemas: SOAP utiliza tipos complejos para no solo proporcionar los datos, sino también validar y mantenerlo en la designación de tipo estricto para el 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 debe y puede permitirse una porción de datos en una solicitud / respuesta . El rest, por otro lado, no tiene ninguno de estos mecanismos.

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

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

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