Cuando empezamos a aprender sobre servicios web de una forma más completa y detallada, al inicio podemos percibir cierta complejidad; y aunque el concepto de Web Service es relativamente simple, esa complejidad existe debido a la gran cantidad de acrónimos para designar la enmarañada de tecnologías que componen el universo de los Web Services, especialmente en el lenguaje de programación Java.
Se necesita mucho tiempo y dedicación para aprenderlas de verdad que solo un par de clases en la universidad y asistir uno o diez videos en YouTube. Y muchas veces es difícil aprenderlas todas, pues apenas uno llega a ver solo una pequeña parte y en ocasiones desconocemos las tecnólogas que componen nuestro proyecto, ya que simplemente manejamos el concepto de Web Service como tal. Y cuando buscamos ayuda, leemos artículos en internet o vemos videos en YouTube, tenemos a enredarnos pues los títulos son poco descriptivos (“Como crear un web service”, “Aprender a crear un servicio web SOAP”, “Crear un servicio REST”, “Crear un servicio con JAX-RS”, “Crear un servicio con JAX-WS”, “Generar un servicio usando wsdl2java”, “Generar un cliente usando wsimport”, “Leer un servicio usando JDOM”, “Consumir un servicio usando HttpURLConnection” , “Consumir un servicio usando HttpClient”, “Consumir un servicio usando Jackson”, “Crear un cliente SOAP usando Apache HttpClient”, “Generar un cliente SOAP en Maven”, etc.). Uno puede aprender viendo estos videos y leyendo muchas publicaciones, sin embargo, la idea es poder aprenderlas en orden y compararlas para poder entender el universo de los servicios web, ya que para entender las nuevas tecnologías es bueno conocer las viejas también.
Un profesor de historia que nasce en el año 2000 no
solo tiene que conocer su historia actual en adelante, sino que también debe
aprender la historia en donde no le tocó vivir. Lo mismo sucede con los Web
Services, es un tema que requiere de muchísimo tiempo y dedicación, hay que
leer mucho, investigar y sobre todo practicar. Cuando era estudiante, me preguntaba
a mí mismo, “¿Pero qué enredo, tantas tecnologías para crear y consumir un
servicio web?” Y eso que esta pregunta me lo hacía hace 8 años atrás. Hoy en
día existen muchísimas más tecnologías las cuales muchas veces nos causan un
estrés aprenderlas pues desconocemos la historia y apenas llegamos a ver una
pequeña parte de ellas.
Esta pregunta me surgió hace mucho tiempo y que veo
que hoy en día a muchísimos estudiantes y profesionales también les causa
curiosidad y al mismo tiempo confusión, pues a mi opinión personal, los
institutos y universidades no son un lugar de estudio, es solo un lugar en
donde nos enseñan, nos llenan de tareas, de exámenes y de proyectos, y casi
nunca hay un tiempo pleno para sentarnos a leer, investigar, ordenar ideas tranquilamente
sin la presión de tener que entregar mañana alguna tarea, presentar algún
proyecto o estudiar para un examen. El alumno está más preocupado en aprobar
que se le olvida aprender de verdad.
Dicho esto, ¿cuál será la diferencia entre JAX-WS,
Axis1, Axis2, CXF y Metro? Bueno, de primera mano les digo que los cinco
pueden ser usados para crear servicios web en Java y existen otras muchas más,
pero digamos que estas son las bases; y para poder entender las diferencias
entre ellas, deben responder a las siguientes preguntas:
·
¿Qué es RPC?
·
¿Qué es Java RMI?
·
¿Qué es XML-RPC?
·
¿Qué es JAX-RPC
·
¿Qué es JAX-WS?
¿Qué es RPC?
Es una tecnología de comunicación entre procesos que
permite que un programa de computadora llame a un procedimiento en otro espacio
de direcciones (comúnmente en otra computadora, conectada por una red). Desde
el punto de vista del código, la llamada se asemeja a las llamadas a
procedimientos locales. En otras palabras, RPC es una tecnología que permite
implementar el modelo cliente - servidor.
¿Qué es Java RMI?
Es un mecanismo ofrecido por Java que existe desde la
versión 1,1 del JDK para invocar un método de manera remota. Es decir, permite
que un objeto que se ejecuta bajo el control de una máquina virtual Java pueda
invocar métodos de un objeto que se encuentra en ejecución bajo el control de
una máquina virtual Java diferente. Estas dos máquinas virtuales pueden estar
ejecutándose como dos procesos independientes en el mismo ordenador o en
ordenadores distintos conectados a través de una red TCP/IP.
La principal diferencia de utilizar RPC o RMI, es que
RMI es un mecanismo para invocación remota de procedimientos basado en el
lenguaje de programación Java que soporta interacción entre objetos, mientras
que RPC no soporta esta característica.
¿Qué es XML-RPC?
Es un protocolo de llamada a procedimiento remoto
(RPC) que utiliza XML para codificar sus llamadas y HTTP como mecanismo de
transporte. Este protocolo sencillo fue creado en el año de 1998 y poco tiempo
después dejó de ser considerado un estándar sencillo para conversarse en lo que
es actualmente conocido como SOAP.
¿Qué es JAX-RPC?
JAX-RPC (Java API for XML-based RPC), o en español API
de Java para RPC basado en XML, permite que una aplicación Java invoque un
servicio web basado en Java a través de su WSDL. Puede verse como RMI de Java a
través de servicios web.
En JAX-RPC 2.0 se cambió el nombre a JAX-WS 2.0 para
alejarse del estilo RPC y pasar hacia servicios web de estilo de documento.
¿Qué es JAX-WS?
JAX-WS (Java Api for XML Web Services), o en español
API de Java para servicios web XML. Es una tecnología desarrollada a partir de
Java Enterprise Edition 5 (JEE5), que permite construir servicios web y
clientes SOAP que se comunican utilizando XML.
Entonces, ¿cuál es la diferencia entre JAX-WS, Axis1, Axis2, CXF y
Metro?
La diferencia es que JAX-WS es una especificación (es
una API), así como lo es JAX-RS o JMS, mientras que Axis2, CXF y Metro son sus
implementaciones. Por otro lado, Apache Axis se basa en JAX-RPC (API
predecesora de JAX-WS) y en la actualidad, ha sido reemplazado por las otras
tecnologías.
De manera sencilla y para que lo entiendas, puedes ver
a JAX-WS como una interfaz y a Axis2, CXF o Metro como una clase que implementa
dicha interfaz.
El uso de una u otra implementación, dependerá de la
integración que queramos realizar en nuestro proyecto. Por ejemplo, si
quisiéramos integrar JAX-WS con Spring, CXF sería una muy buena opción ya que
tiene soporte con Spring y Camel, así como OSGi y ActiveMQ para JMS (Java
Message Service). Por otro lado, Axis 2 y CXF no solo implementan JAX-WS, sino
que también implementan la especificación JAX-RS por lo que soportan muy bien
la exposición de servicios como REST y SOAP, entre otras muchas razones por las
que podríamos querer utilizarlas. Asimismo, entre los componentes de Metro se
incluyen JAXB RI, JAX-WS RI, SAAJ RI, StAX (implementación de SJSXP), WSIT y
otras APIs. Y si necesitáramos alguna de las cosas más complejas como
WS-Security, WS-SecureConversation, WS-RM, WS-Policy, etc., necesitaríamos usar
algunas de las alternativas mencionadas anteriormente.
Cabe mencionar que hoy en día, los servicios web SOAP
son de alguna manera obsoletos; aunque todavía se enseña y se utiliza, la nueva
tendencia es utilizar servicios web REST, es decir crear servicios con la
especificación JAX-RS, utilizando alguna de sus implementaciones como Axis2,
CXF, Jersey, Restlet, REST-assured, HttpCient, Apache HttpClient, OKHttp,
Retrofit, etc.
Espero que este post haya sido de tu agrado y si te
gustó dele me gusta y compártelo con tus amigos; y recuerda que existen muchas
maneras de crear y consumir un Web Service sea este SOAP o REST. Puede que no
siempre sea la opción más conveniente o quizá no sea posible el uso de alguna
de esas herramientas, aunque eso sí, no cabe duda de que facilitan muchísimo el
desarrollo que sin ellas sería bastante arduo.
Como dato adicional, en la actualidad existe una nueva
tecnología llamada GraphQL la cual fue creada por Facebook en el 2012 y lanzada
el 2015, y que vendría a ser una arquitectura alternativa a REST.
La principal diferencia entre SOAP y REST, es que SOAP
es un protocolo (es un estándar, tiene normas que cumplir), y REST no lo es (no
tiene reglas, permite muchos formatos de datos diferentes, o sea que puedes
enviar un JSON, un TEXTO, un XML, un HTML, etc. Lo importante es que el cliente
y el servidor se entiendan y estén contentos).
Referencias
Les dejo los siguientes enlaces para que puedan
leer más al respecto, por mi parte será hasta otra oportunidad. ¡Qué tengan un
buen día!
RPC: https://es.wikipedia.org/wiki/Llamada_a_procedimiento_remoto
Java RMI: https://es.wikipedia.org/wiki/Java_Remote_Method_Invocation
XML-RPC: https://es.wikipedia.org/wiki/XML-RPC
JAX-RPC: https://es.wikipedia.org/wiki/JAX-RPC
JAX-WS: https://es.wikipedia.org/wiki/JAX-WS
Apache Axis1: https://axis.apache.org/axis/java/
Apache Axis2: https://axis.apache.org/axis2/java/core/
Apache CXF: http://cxf.apache.org/
Metro: https://javaee.github.io/metro/
GlassFish Metro: https://es.wikipedia.org/wiki/GlassFish_Metro
¿Por qué usar Apache Axis2? https://axis.apache.org/axis2/java/core/
¿Por qué usar Apache CXF? http://cxf.apache.org/docs/why-cxf.html
¿Por qué usar Apache Metro? https://javaee.github.io/metro/
Servicio web: https://es.wikipedia.org/wiki/Servicio_web
Redes sociales:
🔹https://www.instagram.com/aprendec_oficial/
🔹https://www.facebook.com/AprendecOficial/
🔹https://www.pinterest.com/aprendecoficial/
🔹https://www.twitter.com/aprendecoficial
🔹https://www.facebook.com/joseltoroal
🔹https://code.dcoder.tech/profile/joseltoro
🔹http://joseltoro.blogspot.com/
#Algoritmos #FundamentosDeProgramación #ProgramaciónOrientadaAObjetos #LenguajeDeProgramación #BaseDeDatos #DesarrolloWeb #DesarrolloDeAplicacionesMóviles #UPC #UTP #Catolica #UPN #UNACH #Cibertec #CV #CesarVallejo #TELESUP #UniversidadSUPER
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!