En el diseño software de clientes móviles para iOS es muy habitual la necesidad de establecer comunicación con la capa de servicios utilizando arquitecturas basadas en servicios web. A pesar que en la documentación oficial de Apple existen muchas recomendaciones acerca de como orientar la solución, lo cierto es que no existe una sección especifica que trate directamente el asunto.
photo credit: Guillermo Esteves
En este artículo voy a comentar las soluciones que considero más elegantes y robustas, esto es, que no hacen uso de librerias externas que no aseguren un soporte «oficial» por parte de un organismo contrastado en internet como pudiera ser The Apache Software Foundation, JBoss Community team, Oracle, o los propios frameworks oficiales de Google y Apple.
Dentro del area de los web services vamos a comentar en el artículo los dos diseños más utilizados, el protocolo SOAP (que deriva del protocolo de llamada a procedimiento remoto XML-RPC), y la implementación bajo RESTful (que se acerca mas a una arquitectura de diseño software que a un protocolo de servicios web, aunque al final acaba usándose con el mismo fin de estos).
Para la conexión con servicios SOAP Apple no ha dispone de librerías ni clases en su iOS SDK, es decir que ‘oficialmente’ no podemos valernos del WSDL que definamos para abstraernos de los servicios a los que nos debemos conectar. La única manera de conectarnos a los service point definidos es lanzando una conexión asíncrona (obviamente) mediante el objeto NSURLConnection. Existen alternativas en proyectos como ASIHTTPRequetst (que es proporcionado por un grupo de desarrolladores en Google liderado por el programador y diseñador Ben Copsey), pero no deja de ser un wrapper que facilita la conexión. No hay razon de peso para ligar el proyecto a esta libreria. Existen tambien las alternativas wsdl2obj y sudzc, dos proyecto que permiten crear objetos stub que simplificarian mucho la implementación. El problema sigue siendo que estan liderados tambien por grupos de desarrolladores «freelances», y nadie asegura que dentro de varios meses mantengan la compatibilidad con los avances de iOS. No hay que negar, que herramientas como estas seria muy interesante para que el personal de Apple incorporara en el entorno XCode.
Tras la conexión, debemos utilizar un parseador xml para recuperar la informacion. Existen varias vias pero recomiendo el uso de la clase NSXMLParsing (recomenda en la documentacion oficial para parseadores SAX), o bien la libreria libxml2 (recomendada el la documentacion oficial para parseadores DOM).
En resumen, podemos diseñar la conexión con servicios web SOAP sin la utilización de librerias externas. Realizando un diseño de clases que sigan los patrones de diseño recomendados aseguraremos el mantenimiento correctivo y evolutivo en el tiempo.
Por otro lado. Si tenemos la oportunidad de participar en el diseño de la capa de servicios, podemos aconsejar la implementacion bajo RESTful. Este tipo de diseños es utilizado por plataformas como facebook, flicker, twitter, foursquare,…lo cual hace preveer que poco a poco esta implementación irá imponiéndose a SOAP. Una de las ventajas de esta solución es que podemos utilizar el formato JSON en lugar de XML como soporte para la mensajería. Desde la version 5 de iOS, Apple proporciona la clase NSJSONSerialization lo que facilita de un plumazo todo el asunto de parseadores.
En proximos post plantearemos igualmente cuales son nuestras recomendaciones para abordar la conexion desde la plataforma Android así como desde Windows Phone 7.