Relacionado:
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?
web-services
rest
wsdl
Howard mayo
fuente
fuente
Respuestas:
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.
fuente
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
fuente
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".
fuente
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).
fuente
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
fuente
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?
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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).
fuente
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.
fuente