Tipos de Webservices: SOAP y REST

Hoy vamos a hablar acerca de los dos principales tipos de Webservice con los que podemos encontrarnos hoy en día en las aplicaciones empresariales. Los sistemas más modernos, obviamente, estarán operando con servicios REST, pero todavía nos encontraremos con muchos sistemas con algunos años de antigüedad que siguen utilizando servicios SOAP.

 

 

Tipos de Webservices


En primer lugar, hay que comentar que SOAP y REST son dos tipos de servicios que implementan la arquitectura SOA (Service Oriented Arquitecture). Por tanto, aunque se trata de dos tecnologías diferentes, en realidad están basadas en los mismos principios y no hay tantas diferencias entre ellas como normalmente se piensa.

 

Servicios SOAP (Webservices)


Los webservices SOAP son servicios que se comunican bajo el específico protocolo SOAP (Simple Object Access Protocol). Básicamente, esto quiere decir que son servicios que intercambian datos mediante XML y que se comunican bajo el protocolo HTTP (aunque en realidad no está limitado únicamente a HTTP). Lo importante de SOAP es que establece que el formato de los datos intercambiados únicamente puede ser de tipo XML.

 


 

Para la construcción de servicios SOAP, Java ofrece la librería JAX-WS o, lo que es lo mismo, la "Java API XML Web Services" (recordemos que API significa Application Programming Interface). Dicha librería nos ofrece toda la funcionalidad necesaria para la implementación de un webservice de tipo SOAP. Actualmente este proceso puede realizarse mediante simples anotaciones en las clases. Ejemplos de estas anotaciones son: @WebService, @SOAPBinding, @WebMethod, @WebServiceClient, @WebEndPoint, etc...


En el protocolo SOAP, para la conexión entre los webservices se emplean los ficheros de datos con formato construido mediante WSDL (Web Service Description Language). Este lenguaje, como ya podemos suponer teniendo en cuenta lo que dijimos más arriba, está basado en XML. 

 

Un archivo WSDL se compondrá de un apartado genérico "Header" y de un apartado específico "Body". Adicionalmente, dentro del WSDL se puede hacer referencia a archivos XSD (XML Schema Definition), que son los ficheros que detallan la descripción de los datos de los mensajes. Una vez publicado, el archivo WSDL será accesible por medio de un endpoint que tendrá terminación en ?wsdl.

 

La estructura básica de una archivo WSDL sería la siguiente:


<?xml version=”1.0″?>
<definitions>
    <types> … </types>
    <message> … </message>
    <portType> … </portType>
    <binding> … </binding>
</definitions>


Servicios REST


Los webservices REST son servicios que se comunican bajo el protocolo HTTP y esta flexibilidad les permite usar los métodos GET/POST de dicho protocolo para transmitir los datos. Esta característica les permite comunicar cualquier tipo de dato en múltiples formatos: XML, JSON, Text, etc... Con diferencia, hoy en día el más ampliamente extendido en los servicios REST es el formato JSON, ya que facilita la implementación de la arquitectura de los sistemas. 

 


 

Para la construcción de servicios REST, Java ofrece la librería JAX-RS o, lo que es lo mismo, la "Java API RESTful Web Services". Dicha librería nos ofrece toda la funcionalidad necesaria para la implementación de un webservice de tipo REST. Actualmente, esta API también nos permite construir servicios REST mediante anotaciones (de forma análoga a como ocurría con la librería JAX-WS y los servicios SOAP). Ejemplos de estas anotaciones son: @Path, @GET, @POST, @Produces, @Consumes, etc...


Para usar JAX-RS, necesitamos incluir en nuestro proyecto alguna de las implementaciones que dan soporte a dicha API. Una de las soluciones más utilizadas es el framework Jersey (Oracle). Sin embargo, también disponemos de algunas soluciones alternativas muy conocidas: RestEasy (JBoss), Apache CXF (Apache), Restlet (Noelios), etc...


Una vez publicado, el servicio REST será accesible por medio de la URI que se haya establecido en la elaboración del webservice. En este aspecto, REST es más fácil de consumir que SOAP ya que, para hacerlo, bastará con invocar con el JSON correspondiente al endpoint que hayamos definido en su implementación. 


Algunos frameworks, como Jersey por ejemplo, ofrecen la opción de crear un documento WADL (Web Application Description Language) con la descripción de la estructura de datos empleada por el webservice. Se trata de un documento basado en XML que ayuda enormemente a la hora de realizar la invocación a la URI desde un cliente externo (tengamos en cuenta que en muchas ocasiones se tratará de desarrollos realizados por diferentes equipos).


Conclusiones acerca de SOAP y REST


En función de lo comentado, se aprecia claramente cuál es la mayor diferencia entre SOAP y REST. SOAP usa un protocolo más robusto, pero nos obliga a intercambiar datos en formato XML. Por contra, REST usa directamente el protocolo HTTP y eso nos permite intercambiar datos mediante un formato más flexible como es JSON. En cualquier caso, ninguna de las dos tecnologías es mejor que la otra por sí misma, sino que tendremos que escoger la más conveniente en función de la arquitectura y de los objetivos que se hayan establecido para nuestra aplicación.


Pues nada, eso era todo lo que quería comentar en relación con las tipologías de los webservices REST y SOAP. Espero que lo indicado en el post sirva para asentar algunas nociones básicas sobre los mismos. En realidad, se trata de tecnologías mucho más sencillas de lo que pueda parecer a alguien que se acerca por primera vez a los webservices...

 

Saludos.


Comentarios

Entradas populares de este blog

Componentes y Ventanas de Java Swing

Creación de Webservice SOAP básico

Eliminar duplicados de una Lista en Java