2009-03-26 17 views
50

Quiero decir, realmente, ¿cuál es el objetivo de SOAP?JABÓN - ¿Cuál es el punto?

Los servicios web han existido por un tiempo, y durante un tiempo pareció que los términos 'SOAP' y 'Web service' eran en gran parte intercambiables. Sin embargo, SOAP siempre me parecía excesivamente complicado y enormemente complicado.

Luego vino REST, y de repente los servicios web tuvieron sentido.

Como dice Joel Spolsky, dele a un programador una URL REST, y ellos pueden comenzar a jugar con el servicio de inmediato, averiguándolo.

SOAP se ofusca detrás de los WSDL y el XML masivamente detallado, ya pesar de estar basado en la web, no se puede hacer nada tan simple como acceder a un servicio SOAP con un navegador web.

Así que la esencia de mi pregunta es:

  • ¿Hay buenas razones para elegir siempre SOAP sobre RESTO?
  • ¿Estás trabajando con SOAP ahora? ¿Sería mejor si la interfaz fuera REST?
  • ¿Estoy equivocado?

Respuesta

2

Bueno, ahora parece que el WSI acepta que SOAP ya no tiene un punto, ya que han anunciado que dejarán de existir como una entidad independiente.

Interesante artículo sobre el anuncio y algunos comentarios aquí: http://blogs.computerworlduk.com/simon-says/2010/11/the-end-of-the-road-for-web-services/index.htm

Editado sea totalmente precisa en respuesta a John Saunders.

+0

-1: @Dan: SOAP y las especificaciones WS- * son W3C, no WS-I (http://www.w3.org/TR/soap/) –

+0

@John, ¿sería correcto decir que el WS - * especificaciones * impulsadas * por OASIS/WSI luego * ratificadas * (o refinadas) por el W3C? Si ese es el caso, a menos que otro grupo tome la iniciativa, ¿no se ha finalizado efectivamente el nuevo desarrollo de estos estándares? –

+0

@Jeff: WS-I es solo un grupo de interoperabilidad. No creo que hayan tenido nada que ver con el estándar. Los estándares siempre han sido propiedad de w3c. –

4

El objetivo de WSDL fue el descubrimiento automático. La idea era que no tendrías que escribir código de cliente, se generaría automáticamente.

BTW. el siguiente paso más allá de WSDL es Semantic Web Services.

+0

¿Eso sucede mucho? Funciona bien? – DanSingerman

+2

Si lo hiciera, no harías esta pregunta ;-) – vartec

6

Tal como yo lo veo, SOAP podría ser más "flexible", pero como resultado es demasiado complicado (mencionaste el WSDL, que siempre es un obstáculo para mí personalmente).

I obtener REST. Es simple. El único inconveniente que podría ver es que te estás limitando a esas 4 acciones básicas contra un único recurso, que tal vez no se ajuste exactamente a la forma en que ves tus datos.

0

¿No funciona?

"Usted no está mal, Walter, sólo eres ... :)"

¿Hay buenas razones para elegir siempre SOAP sobre RESTO?

SOAP, a mi entender se adhiere a un contrato, por lo tanto se puede verificar.

+0

La cita es del Big Lewbowski ... fwiw. – Alan

11

Como dice Joel Spolsky, dele a un programador una URL REST, y ellos pueden comenzar a jugar con el servicio de inmediato, averiguándolo.

Considerando que si el servicio tenía un contrato bien especificado, legible por máquina, entonces el programador no tendría que perder el tiempo averiguándolo.

(no es que WSDL/SOAP es necesariamente un ejemplo de buena ejecución de un contrato bien especificado, pero que era el punto de WSDL)

Originalmente, jabón era un simple protocolo que permite que usted pueda añadir una cabecera a un mensaje y tenía un mapeo estandarizado de instancias de objeto a estructuras XML. Poner los metadatos de manejo en el mensaje simplificó el código del cliente, y significaba que simplemente podría persistir y poner mensajes en cola.

Nunca necesité los detalles de procesamiento del encabezado cuando construí servicios SOAP en 2001. Esto era antes de WSDL, y era normal usar GET para obtener información y consultas (no diferente a la mayoría de las aplicaciones que dicen ser REST ; REST tiene más en términos de usar hipervínculos para el descubrimiento de servicios) y POST con una carga útil SOAP para realizar acciones. Esas acciones que crearon recursos devolverían la URL del recurso creado al cliente, y el cliente podría OBTENER el recurso. Creo que es el hecho de que WSDL hizo que sea fácil pensar solo en términos de RPC en lugar de acciones que crean recursos que hicieron que SOAP perdiera la trama.

3

Si no necesita las características de la serie WS- * de protocolos; si no necesita servicios de autodescripción; si su servicio no puede describirse completamente como recursos, tal como lo define el protocolo HTTP; si no te gusta tener que crear XML para cada interacción con el servicio, y analizarlo después; entonces necesitas jabón.

De lo contrario, seguro, utilice REST.


Ha habido algunas dudas sobre el valor de un servicio de autodescripción. Mi imaginación me falla cuando se trata de imaginar cómo alguien podría dejar de entender esto. Eso está en mí. Aún así, tengo que pensar que cualquiera que haya usado un servicio mucho más complicado que "Hello, World" sabría por qué es valioso que alguien más escriba el código que acepta parámetros, crea el XML para enviar al servicio, envía él, recibe la respuesta, luego la vuelve a convertir en objetos.

Ahora, supongo que esto puede no ser necesario cuando se utiliza un servicio RESTful; al menos no con un servicio RESTful que no procesa objetos complejos. Incluso con un servicio relativamente simple como http://www.earthtools.org/webservices.htm (que he usado como ejemplo de llamar a un servicio RESTful), uno se beneficia al comprender la estructura de los datos devueltos. Incluso el servicio anterior proporciona un esquema XML; desafortunadamente no describe toda la respuesta. Dado ese esquema uno todavía tiene que procesar manualmente el XML, o bien utilizar una herramienta para producir clases serializables desde el esquema.

Todo esto sucede cuando el servicio se describe en un WSDL, y utiliza una herramienta como "Agregar referencia de servicio" en Visual Studio, o el programa svcutil.exe, o I-forget-what-the- command-is-in-Eclipse.

Si desea ejemplos, comience con los servicios EarthTools y continúe con cualquier otro servicio con mensajes más complicados.

BTW, otra cosa que requiere autodescripción es la descripción de los patrones de mensajes y protocolos admitidos por el servicio. Quizás eso no sea necesario cuando las únicas opciones son los verbos HTTP a través de HTTP o HTTPS. La vida se vuelve más complicada si usas WS-Security y tus amigos.

+0

¿Cuándo necesita _un servicio de autodescripción? Lo que no puede describirse completamente por HTTP. No quiero ser discutidor, pero algunos ejemplos concretos realmente me ayudarán a comprenderlo. – DanSingerman

+0

HTTP no describe nada. No describe la estructura de los mensajes, qué operaciones están disponibles, etc. No hace nada para ayudar a crear programas de clientes para llamar al servicio. –

+1

Sí, esos no son realmente ejemplos. Un servicio REST puede tener documentación API que describe cómo funciona. Todos los servicios SOAP que he usado también necesitan la documentación API. Entonces, ¿qué es lo que SOAP realmente te compra en la práctica? Por favor demuestre con un ejemplo si es posible. – DanSingerman

6

Mientras se hace una investigación para entender algunas de las respuestas aquí (especialmente John Saunders) me encontré con este post http://harmful.cat-v.org/software/xml/soap/simple SOAP es más loco de lo que pensaba ...

+1

¿Puedes parafrasear el contenido de lo que vinculó aquí, en caso de que el enlace desaparezca? Si lo hace, tu publicación no tendrá ningún sentido. –

+0

@tim: actualizó la respuesta con un nuevo enlace al mismo contenido que funciona – DanSingerman

+0

. El enlace ya no funciona. Así que quizás parafrasear hubiera sido útil ;-) – Ian1971

1

creo apelaciones SOAP al Java y.multitud neta que puede estar más familiarizado con el viejo CORBA y COM y menos familiarizado con las tecnologías de Internet.

REST también tiene un inconveniente importante: hay muy poca orientación sobre cómo implementar realmente un sistema de este tipo. Encontrará variaciones significativas sobre la cantidad de API RESTful públicas que se han diseñado. De hecho, muchos violan aspectos clave de REST (como el uso de GET para manipulación o POST para recuperación) y existen desacuerdos sobre el uso fundamental (POST/GET frente a POST/GET/PUT/DELETE).

+0

Creo que SOAP atrae a las personas que tienen soporte de herramientas. Si sabe que no tiene soporte, y tendrá que hacer todo el procesamiento XML o JSON usted mismo, entonces puedo ver dónde desea que todo sea lo más simple posible. Pero si puede tener herramientas, entonces tiene que haber metadatos para dar a las herramientas. –

2

Me parece que SOAP se adapta más adecuadamente cuando hay una gran probabilidad de que un servicio sea consumido por el software corporativo (COTS). Debido al contrato bien especificado empleado por SOAP/WSDL, la mayoría de los paquetes COTS tienen funcionalidad incorporada para consumir dichos servicios. Esto puede facilitar que las herramientas de BPM/flujo de trabajo, etc. simplemente consuman servicios definidos sin personalización. Más allá de ese caso de uso del servicio REST tiende a ser la implementación de mi servicio web goto para aplicaciones.

0

SOAP es una especificación ligera de protocolo estructurado basado en XML para ser utilizada en la implementación de servicios. Se utiliza para intercambiar información estructurada en un entorno descentralizado y distribuido. SOAP utiliza tecnologías XML para intercambiar información sobre cualquier protocolo de capa de transporte. Es independiente de cualquier modelo de programación particular y otra semántica específica de implementación. Obtenga más información sobre XML SOAP Messaging Framework

Marco de mensajería basado en XML que es 1) Extensible: la simplicidad sigue siendo uno de los principales objetivos de diseño de SOAP. SOAP define un marco de comunicación que permite añadir características como seguridad, enrutamiento y confiabilidad como extensiones en capas

2) Interoperable: SOAP puede utilizarse sobre cualquier protocolo de transporte como TCP, HTTP, SMTP. SOAP proporciona una vinculación explícita hoy para HTTP.

3) Independiente: SOAP permite cualquier modelo de programación y no está vinculado a la llamada a procedimiento remoto (RPC). SOAP define un modelo para procesar mensajes individuales y unidireccionales. SOAP también permite cualquier número de patrones de intercambio de mensajes (MEP). Obtenga más información acerca de SOAP