Hace algunos años el mundo de la informática e programación se ha expandido con propuestas innovadoras, basadas en técnicas estándar para describir interfaces a componentes de software , métodos para acceder a dichos componentes mediante protocolos interoperables y descubrimientos de métodos que te perminten identificar importantes proveedores de servicios.
Los servicios web (Web Services) son componentes programables que proporcionan un servicio donde es accesible por internet. Pueden funcionar de manera independiente o pueden estar conectados entre sí para proporcionar una funcionalidad mayor.
Servicios web XML y JSON
Actualmente muchas aplicaciones móviles pueden pasar sin ninguna dificultad sin tener que intercambiar información por la web, pero si buscas construir aplicaciones móviles orientadas a datos, tarde o temprano vas a tener que comunicarte con un servidor remoto. Hay muchas maneras diferentes de lograr este objetivo. Algunos enfoques son breves y ligeros, mientras que otros son terriblemente ineficientes y pesados en datos. Para dispositivos móviles, cual pueden estar limitados por un límite mensual de datos y velocidades de conectividad lentas, queremos ser lo más ligeros y eficientes posibles.
Problemas con HTML
En un mundo perfecto, tendríamos servicios web (web services) para cada bit de datos que querríamos consumir, pero lamentablemente no es el caso. En un proyecto en particular se tiene que reajustar y reducir el envio de los formularios y raspar el resultado HTML. Imagine el impacto que esto tiene en un dispositivo móvil. La manipulación de cadenas implicadas en analizar el HTML resultante requería una cantidad sólida de codificación. HTML puede ser pesado; Contiene datos que no necesitamos, incluidas las imágenes y el lenguaje de marcado que no tienen importancia para nosotros como consumidores de datos puros. HTML es largo porque contiene muchos caracteres distintos del contenido puro, lo que se traduce en una velocidad de transferencia lenta y se come en los límites mensuales de transferencia de datos. También es dinámico y propenso a cambiar (como si aún no lo hayas descubierto), y eventualmente destruirá tu rutina de análisis, que es el proceso de reducir toda la cadena HTML a sus componentes utilizables usando funciones de manipulación de cadenas.
Las ventajas de los servicios web
Una forma de superar las limitaciones del HTML es utilizar los servicios web. Para aquellos que no saben, un servicio web puede ser pensado como una llamada de función a un servidor remoto y ofrece una funcionalidad muy específica. Los servicios Web existen en toda la web y muchos están abiertos al público. Si tiene suerte, puede encontrar uno que cumpla con sus requisitos de datos. Si no, siempre se puede construir y alojar uno usted mismo. La ventaja de los servicios web es que se centran en un conjunto particular de datos, por lo que no tiene que filtrar la información que no es de utilidad para usted. Por ejemplo, digamos que quería un pronóstico del tiempo. Puede llamar a un servicio web y pasar una fecha y esperar obtener un pronóstico resultante para la fecha que envió. Esto significa que estamos tratando con un pequeño conjunto de datos específicamente enfocados en nuestra necesidad, lo que equivale a un tamaño de datos más pequeño ya una velocidad de transmisión más rápida. Sin embargo, no todos los servicios web se crean iguales. La amplitud de las diversas diferencias técnicas entre los tipos de servicio web es demasiado amplia para abordar en un solo post de blog, pero vamos a discutir la diferencia en los formatos de retorno, ya que pueden tener un impacto mensurable en la velocidad.
Formatos de Retorno
En mi experiencia, he encontrado dos formatos principales de devolución de servicios web: XML y JSON.
XML (Lenguaje de Marcado Extensible) ha sido una forma popular de estructurar datos usando un lenguaje de marcado familiar. Es a la vez humano y legible por máquina y es muy similar en apariencia al lenguaje HTML. Sigue un conjunto de estándares para la comunicación de datos a través de redes entre dispositivos y es iterativamente parseable. Una ventaja de consumir datos en este formato es su estructura. Los datos se pueden agregar o quitar del conjunto de resultados, pero a menudo existirá en un formato predecible para que no tenga que preocuparse de que su rutina de análisis se rompa cuando los datos cambian con el tiempo. A pesar de sus ventajas, un inconveniente de XML es su tamaño, ya que contiene muchos caracteres estrictamente relacionados con el formato. Al descargar datos a un dispositivo móvil, sería ideal para obtener el contenido relevante en lugar de los datos relacionados con el formato de contenido. Aquí es donde entra JSON.
JSON (JavaScript Object Notation) es un formato de intercambio de datos basado en texto derivado del lenguaje de encriptación de JavaScript. Está formateado como pares clave-valor y es a menudo elogiado como un overhead menor a XML, ya que se centra más en el contenido y menos en el formato. Esto funciona a nuestro favor cuando queremos mantener los paquetes de intercambio de datos tan compactos posibles. Ahora, para ser justos con XML, es posible formatearlo de formas específicas o usar compresión para que sea comparable en tamaño a JSON, pero generalmente encuentro JSON que es mucho más pequeño en tamaño y por lo tanto preferible a XML.
Una última observación (enfocada hacia iOS, ya que es la plataforma más robusta) se centra en cómo se procesa los dos formatos en el dispositivo una vez que se ha devuelto la información hacia el servicio web (web service). Analizar un XML en iOS puede ser un poco tedioso, ya que implica la implementación de un puñado de métodos NSXMLParserDelegate para iterar a través del código XML. Esto puede requerir una cantidad significativa de codificación. Por otro lado, si un objeto JSON es devuelto desde un servicio web, podemos convertirlo directamente en objetos nativos como NSDictionary o NSArray. Estos objetos se pueden archivar y podemos acceder a elementos de datos como pares de valores clave sin tener que implementar ningún método de delegado o iterar a través de los datos de resultado. Esto equivale a un aumento mensurable en velocidad y eficiencia. Para mi dinero y tiempo, JSON es absolutamente el camino a seguir para el consumo de datos de dispositivos móviles.
Ejemplo de barra de menú de un JSON y XML. Fuente de código: wikipedia
JSON
{ "menu": { "id": "file", "value": "File", "popup": { "menuitem": [ { "value": "New", "onclick": "CreateNewDoc()" },{ "value": "Open", "onclick": "OpenDoc()" },{ "value": "Close", "onclick": "CloseDoc()" } ] } } }
XML
<menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu>
Muy buena información.