Los web services estaban llamados a revolucionar las tecnologías de la información. Prometían nada menos que un mundo de máquinas interrelacionadas, comunicando y colaborando entre sí para para dar servicio a las más variadas funcionalidades. Si la world wide web es la «internet para las personas», los servicios web serían la «internet de las máquinas».
Sin embargo, ya han pasado unos cuantos años desde la publicación de los estándares que forman esto que conocemos como web services y las expectativas, en mi opinión, no se han visto totalmente colmadas.
Después de tantos años la adopción de esta tecnología en las grandes empresas solamente ha sido parcial. ¿cuáles han sido la razones para ello? En mi opinión la siguientes:
- La alta complejidad de los estándares
- Problemas de interoperabilidad
- La irrupción de otras tecnologías más simples
Alta complejidad de los estándares
En realidad lo que conocemos como web services no es una especificación única, son varias y en la mayor parte de los casos muy complejas (se conocen con WS-*). Para hacerse una idea de la proliferación de estas especificaciones basta con ver la lista de los más importantes: SOAP, WSDL, WS-Addressing, WS-Policy, Attachments, WS-Security, XML Signature, XML Encryption, XML Key Management (XKMS), WS-Trust, WS-Federation Security Assertion Markup Language (SAML), XACML, WS-Reliability, etc. y continúa en aumento.
Evidentemente esta es una barrera muy importante para su adopción en las empresas.
Problemas de interoperabilidad
A pesar de la extensión y complejidad de las especificaciones que forman los web services, o quizás por este mismo motivo, existen infinidad de problemas de interoperabilidad entre aplicaciones (máxime cuando usan diferentes lenguajes y tecnologías como .NET y J2EE). Las especificaciones son en ocasiones tan ambiguas que dos aplicaciones pueden seguirla a pies juntillas y a pensar de todo no son capaces de entenderse. Por ejemplo, es posible que el cliente .NET codifique en XML los arrays de datos de una manera (legal según la especificación de SOAP) que no pueda entender el servidor hecho con J2EE.
Para evitar los problemas patentes de interoperabilidad en el uso de servicios web, la Organización para la Interoperabilidad de Servicios Web (Web Services Interoperability Organization WS-I), ha recortado el conjunto de especificaciones eliminando todo aquello excesivamente complejo y ambiguo (por ejemplo define como han de ser los arrays de datos para que se puedan entender las dos partes). Este conjunto de normas se recogen en el llamado Basic Profile (1.0 y 1.1) acordado por los mayores fabricantes de la industria (Microsoft, IBM, BEA, Sun Microsystems, Novell, Oracle, SAP, etc.)
En conclusión, en la práctica los desarrollos de web services deben seguir el Basic Profile para lograr el objetivo para el que han sido inventados, poder comunicar dos aplicaciones entre sí.
Tecnologías más simples
- REST (Representational state transfer).
Uno de los principales autores del protoco HTTP, Roy Fielding, lo introdujo en su tesis doctoral allá por el año 2000.
Define una forma de comunicación entre aplicaciones basado en XML y HTTP sin las complicaciones de las especificaciones de web services. Se basa en un protocolo cliente-servidor sin estado, adapta el concepto de las operaciones HTTP (GET, POST , PUT y DELETE) considerandolas como operaciones CRUD.
Sus principios de diseño son:
Identificación de recursos: los recursos son identificados en las operaciones, normalmente mediante URIs.
Manipulación de los recursos a través de las repesentaciones de los mismos que se envían al cliente.
Los mensajes son autodescriptivosLas principales ventajas son su sencillez (en oposición a la gran curva de aprendizaje que tienen los web services), su rapidez de desarrollo, mayor escalabilidad que los web services (es un protocolo más liviano) - JSON (Javascript Object Notation)
Es un formato ligero de intercambio de datos (hecho en javascript) que viene a sustituir al XML que tradicionalmente se venía usando para estos menesteres.
JSON está siendo usado ampliamente ya en la actualidad, en el contexto de la llamada web 2.0. Con la ayuda del AJAX las aplicaciones de internet ricas, con profusión de uso de javascript, intercambian este tipo de mensajes con el servidor.
¿Sus ventajas? sencillez de uso (sobretodo en aplicaciones ricas basadas en frameworks javascript) y también el rendimiento. Se han hecho comparativas entre el uso con JSON y con XML y ha resultado ganador el primero con diferencia.
Evidentemente, si el formato XML ya no es usado para la comunicaciones entre aplicaciones, por extensión, tampoco serán necesarios los web services que se basan en éste.
¿realmente estamos construyendo servicios web?
En la esencia de un web services está el tener un fichero de definición (WSDL) por el cual el servicio se auto describe a sí mismo. Para ello obviamente deben estar claro su interfaz de entrada/salida, su nombre, su tipo, etc.
Sin embargo, según mi experiencia, en la mayor parte de los casos los servicios web que existen no tienen este interfaz definido en el WSDL. Algunos los llaman servicios «genéricos», yo los llamo servicios de «formato churro». Estos servicios normalmente suelen tener un campo de entrada de tipo String y otro campo de salida en el que se inserta un mensaje en formato XML.
- Flexibilidad: Sus defensores dicen que son muy «flexibles» porque en el caso de que se quiera cambiar el mensaje no es necesario volver a desplegar el servicio. Esto realmente no es así ya que si se añade un campo, por ejemplo, es necesario obviamente cambiar cliente y el servidor para que trate este nuevo campo.
- No es autodescrito: Además, este tipo de servicios va contra la esencia misma del servicio web, ya no se describe a sí mismo. En lugar de esto, se tiene un campo de mensaje que en realidad es un cajón de sastre en el que cabe todo. Peor aún, la necesidad de describir el formato del mensaje sigue estándo ahí por lo que normalmente al pobrísimo WSDL de este servicio se acompaña un documento Word donde se explica al programador del cliente qué mensaje tiene que enviar ¿no es esto absurdo? ¿no se supone que los web services se han inventado para que dos máquinas se puedan entender e intercambiarse mensajes?.
- ¿por qué no usar HTTP/POST?: ¿por qué nos complicamos innecesariamente con el uso de una especificación tan compleja como los web services? Si hay que enviar un mensaje SOAP, hacer un cliente proxy, usar una herramienta específica para probar, etc. etc. ¿no sería más sencillo hacer un HTTP POST con XML como se ha hecho toda la vida?
Conclusiones
Si queremos que esta tecnología se adopte ampliamente se tendrá que hacer un esfuerzo de simplificación de las especificaciones y también un avance significativo en las herramientas de desarrollo. Tal vez la foto final pase por un modelo mixto de servicios (basados en SOAP) conviviendo con REST:
- Dentro de una misma corporación, donde no se necesita unos interfaces o contratos rígidos, se podría adoptar REST por su facilidad, sencillez y rapidez de desarrollo
- En la comunicación entre corporaciones, uso de servicios web con un contrato formal entre el que presta el servicio y el cliente.
08/02/2010 at 11:22
Hola,
Estoy de acuerdo con tu planteamiento.
Cuanta complejidad para tan poco rendimiento.
Creo que deberíamos volver al HTTP/POST con XML en raw o en base 64.
Y las credenciales de seguridad en la cabecera.
Y a tirar millas…
08/02/2010 at 11:45
Hola Andrés.
Encantado de encontrarte en el mundo de los blogs. También.
Mi experiencia supongo que andará cerca de la tuya (no sólo físicamente…) si no en tiempo, en las garras corporativas.
Sin embargo, difiero en parte en mi conclusión:
-Cualquier tecnología que se quiera aplicar en un amplio espectro como son las TI corporativas, debe hacerse manteniendo la compatibilidad con lo existente, debido al grandísimo capital que supone un cambio general y al capital que representa como activo lo ya existente y funcional. Por ello, obviamente, implementar estas «nuevas» tecnologías, siempre debe pasar por hacer las «ñapas» que encapsulen lo existente, lo que aumenta la complegidad de la tecnología.
Por otro lado, soy de la opinión de un viejo roquero: «KISS», o lo que viene a ser:
Keep It Simple, Stupid.
Si algo es simple, es fácil de implementar, barato de realizar, fácil de mantener y siempre extensible y por ende ampliable.
El éxito de los protocolos estándares están en su simpleza, tanto de implementación como de infraestructura requerida: html, dns, php, xlm, svg, rss, etc… y JSON cumple con las espectativas: no hace falta infraestructura nueva, es el mismo javascript de siempre, es fácil de implementar y ya existen clases que lo tratan (en php, java, .net, etc), no se requieren servidores nuevos para publicar nada nuevo… en definitiva: es simple, es fácil, es barato…
Pues nada más que esto:
Espero leerte todas las semanas y si no ya te lo recordaré los lunes… je, je, je…
Un abrazo y buena suerte en esta aventura.
22/09/2010 at 10:55