servicio que ejemplos rest soap

que - soap rest ejemplos



JABÓN-¿Cuál es el punto? (11)

Quiero decir, realmente, ¿cuál es el punto de SOAP?

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 apareció 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 XML masivamente detallado, y a pesar de estar basado en la web, no se puede hacer nada tan simple como acceder a un servicio SOAP con un navegador web.

Entonces, la esencia de mi pregunta es:

  • ¿Hay alguna buena razón para elegir SOAP sobre REST?
  • ¿Estás trabajando con SOAP ahora? ¿Sería mejor si la interfaz fuera REST?
  • ¿Me equivoco?

¿Me equivoco?

"No estás equivocado, Walter, solo estás ... :)"

¿Hay alguna buena razón para elegir SOAP sobre REST?

SOAP, a mi entender se adhiere a un contrato, por lo tanto puede ser revisado por tipo.


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

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

(No es que WSDL / SOAP sea necesariamente un ejemplo de buena implementación de un contrato bien especificado, pero ese era el objetivo de WSDL)

Originalmente, SOAP era un protocolo simple que le permitía agregar un encabezado a un mensaje, y tenía una asignación estandarizada de instancias de objetos 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í los servicios SOAP en 2001. Esto fue anterior a WSDL, y luego era normal usar GET para obtener información y consultas (no es diferente de 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.



Creo que SOAP atrae a los usuarios de Java y .net que pueden estar más familiarizados con el viejo CORBA y COM y menos familiarizados 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).


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.

Por cierto. El siguiente paso más allá de WSDL son los servicios web semánticos .



Encuentro que SOAP se ajusta más apropiadamente cuando hay una alta probabilidad de que un servicio sea consumido por un 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.



SOAP es una especificación de protocolo estructurada ligera basada 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 la 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 agregar características como seguridad, enrutamiento y confiabilidad más adelante como extensiones en capas

2) Interoperable: SOAP se puede usar 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 sobre SOAP


Si no necesita las características de la serie de protocolos WS- *; 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, use REST.

Se ha cuestionado 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 de la comprensión de 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- en-Eclipse.

Si desea ejemplos, comience con los servicios de http://www.earthtools.org/webservices.htm y continúe con otros servicios con mensajes más complicados.

Por cierto, otra cosa que requiere autodescripción es la descripción de los patrones de mensajería 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.


Tal como 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).

Me sale el RESTO. 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.