El universo de servicios disponibles hoy en día en Internet es tan inmenso como heterogéneo y muchos de ellos comparten información entre sí. Entonces, ¿cómo lograr que todos estos sistemas, siendo diferentes uno del otro, puedan transmitirse datos? Sencillo, gracias a los formatos de representación de información.

Si bien el HTML fue concebido para compartir información a través de Internet, no fue diseñado para compartir objetos sino documentos. Es por esto que sus etiquetas (tags en inglés) se limitan a estructuras básicas de texto y formatos de presentación de la información.

Los sistemas necesitan formatos más robustos, que permitan transmitir y compartir información más compleja entre sistemas diferentes, con estructuras jerárquicas y atributos variables pero a su vez fáciles de leer por un humano. Es aquí donde entran estándares como XML, JSON y YAML.

XML

Al igual que HTML, XML es un lenguaje de marcado que obtiene su nombre del inglés Extensible Markup Language. Este lenguaje define un conjunto de reglas para codificar información de manera que sea legible por un ser humano y por un ordenador. Esta información codificada se conoce comúnmente como documento pero gracias a su flexibilidad carece de las limitaciones de los documentos HTML y puede ser usada para representar cualquier estructura de datos.

XML se usa ampliamente para transmitir información en servicios webs y APIs REST y para archivos de configuración. Uno de los lenguajes de programación que le da más soporte es Java. A continuación un extracto de cómo podríamos representar información básica de un libro con una estructura jerárquica y flexible usando XML:


<catalogo>
    <libro>
        <autor>Raúl González Duque</autor>
        <titulo>Python para todos</titulo>
        <genero>Computación</genero>
    </libro>
</catalogo>


Una de las fortalezas de XML es el soporte a Unicode, lo que permite escribir la información en cualquier idioma del mundo y otra es el amplio soporte que tiene en la actualidad. Sin embargo ha sido duramente criticado por su verbosidad y complejidad; mapear una estructura básica XML usando tipos de datos de un lenguaje de programación o bases de datos a veces puede ser muy difícil y poco descriptivo. Además, para documentos muy grandes, suele requerir un uso más intensivo de memoria y procesador.

JSON

JSON es un estándar abierto que utiliza texto plano para codificar información en la forma atributo: valor. Su nombre proviene del inglés JavaScript Object Notation y aunque en sus inicios fue considerado como una parte de JavaScript, siempre ha sido independiente del lenguaje de programación y se encuentra disponible para los más populares.

También es ampliamente usado para intercambio de información entre servicios web y APIs REST. Su simplicidad y facilidad de implementación le otorgan un gran desempeño y lo convierten en una de las alternativas ideales al momento de reemplazar XML. En el siguiente ejemplo se puede observar la misma representación del libro pero ahora en formato JSON:

{
  libro: {
    autor: Raúl González Duque,
    titulo: Python para todos,
    genero: Computación
  }
}


Un tema a considerar cuando se usa JSON es el Unicode, pues presenta variaciones en las distintas implementaciones y a veces puede representar un riesgo de seguridad por la facilidad de ejecutarlo usando la función eval de JavaScript.

Un objeto JSON es un objeto válido JavaScript por lo que es el formato perfecto para ese lenguaje pero también es empleado con mucha frecuencia por los desarrolladores Python. La mayoría de los navegadores web modernos incluyen funciones nativas para codificar y decodificar JSON, lo que le da un punto de ventaja en lo que se refiere a desempeño y disminuyen los riesgos de seguridad.

YAML

YAML es otro formato para el intercambio de información que tiene como objetivo facilitar el mapeo de estructuras de datos más complejas (como listas y arreglos asociativos) en un documento de texto plano legible para un ser humano. Si bien es un formato joven, sus características le han hecho ganarse un lugar importante en la web, junto con XML y JSON.

Es más estricto que los anteriores pero también más simple. Estas características le otorgan elegancia y claridad, haciéndolo ideal para tareas que involucren intervención de un humano. Luego del salto podrán ver el ejemplo del libro ahora expresado en formato YAML:

---
  libro:
    autor: Raúl González Duque
    titulo: Python para todos
    genero: Computación


La simplicidad también le otorga velocidad pero, a diferencia del JSON, no es usado para servicios web o APIs REST sino para archivos de configuración, depuración u otros fines en los que la facilidad de lectura juegan un rol importante. Ha tenido muy buena acogida entre los desarrolladores de Ruby y es ampliamente usado en frameworks como Ruby On Rails.

Gracias a estos formatos, podemos contar con servicios y aplicaciones que hacen más fácil la vida de desarrolladores y usuarios.