¿Qué es YAML y para qué sirve este formato?
En el mundo informático podemos encontrar numerosos formatos de intercambio de datos. Estos formatos se han popularizado de manera notable en la actualidad por la proliferación de aplicaciones distribuidas y como vía sencilla para la incorporación de configuraciones en aplicaciones. Hoy nos centramos en YAML un formato de intercambio que se ha extendido sobre todo en el área DevOps, llegando incluso a competir en popularidad con JSON en el área de las API.
¿Qué es YAML?
YAML es un formato de intercambio de datos, que se escribe en ficheros de texto plano. Su uso es similar a otros formatos conocidos como JSON o XML, aunque aporta algunas novedades interesantes de cara a la versatilidad y utilidades del formato a la hora de representar datos complejos.
A diferencia de JSON, YAML elimina la necesidad de acotar todos los grupos de datos entre llaves, además de aportar una estructura de información todavía más legible para los ojos humanos.
Características clave de YAML
Para poder entender bien el formato YAML vamos a especificar de manera detallada sus principales características.
Legibilidad humana como principio fundamental
El formato YAML se ha realizado con la intención de ofrecer una alternativa de codificación que resulte sencilla de leer para los humanos. Esto hace que los datos albergados en los archivos YAML sean fáciles de interpretar, incluso en un breve vistazo.
Sintaxis basada en indentación en lugar de etiquetas
Algunos formatos como XML se basan en la utilización de etiquetas para definir los datos, ya sea a la hora de transferirlos en aplicaciones distribuidas o al declarar las configuraciones de las aplicaciones. Sin embargo, YAML no utiliza etiquetas. En lugar de ello usa un sistema de indentación para definir qué datos están dentro de otros. Esto hace que el formato sea más ligero y menos verboso.
En relación a JSON también hay mejoría, ya que puedes entender la indentación como las llaves que utiliza la notación de objetos Javascript para realizar anidación de datos.
Soporte para listas, diccionarios y estructuras anidadas
El formato YAML permite cualquier tipo de estructura de datos simple o compleja, de modo que ofrece un soporte ideal para las necesidades comunes de los sistemas de intercambio de datos o los archivos de configuración.
Algunas de sus estructuras más relevantes son las listas y los diccionarios. Además, tiene soporte para estructuras anidadas, usando el mecanismo de la indentación.
Compatibilidad con múltiples lenguajes de programación
El soporte de YAML se extiende en multitud de lenguajes de programación, ya sea de manera nativa o por medio de librerías específicas para interpretar los archivos. Pero en cualquier caso, al tratarse de archivos de texto plano, son fáciles de leer por cualquier sistema informático. En esto no aporta mucha más novedad en relación a otros formatos ya conocidos.
Posibilidad de incluir comentarios y alias
Otra posibilidad interesante de este formato, en relación a otros como el JSON, es la posibilidad de incluir comentarios y alias en el propio código. Los alias son una utilidad muy potente, ya que nos permiten reutilizar código, evitando repeticiones. Algo ideal para los archivos de configuración.
Estandarización mediante el formato YAML 1.2
El formato también tiene un equipo de estandarización que trabaja para que todos los sistemas que soportan YAML lo hagan en la misma dirección. Actualmente la mayoría de aplicaciones DevOps, como Kubernetes o Ansible, usan YAML 1.2, aunque hay algunas revisiones más modernas que han aparecido en los últimos años.
Integración con herramientas DevOps y automatización de entornos
Dentro de todas las utilidades posibles para este formato, de las que vamos a hablar en futuros puntos de este post, destaca la utilización en una enorme cantidad de herramientas DevOps. Podemos haberlo visto a la hora de definir configuraciones de despliegues y pipelines de manera declarativa, en sistemas tales como GitHub Actions o Docker Compose, entre otros.
Estructura básica de un archivo YAML
En los próximos puntos vamos a explicar de manera más detallada como es un archivo YAML, para que podamos conocer este formato un poquito mejor.
Uso de espacios en lugar de tabulaciones para la jerarquía
Como hemos dicho antes, la indentación es una de las características más representativas de YAML. Pero es importante saber que YAML utiliza espacios en lugar de tabulaciones para definir la jerarquía de los datos.
Veamos un código de YAML para visualizar las indentaciones: aplicacion: nombre: 'MiApp' version: 1.0.0 servidores: - nombre: 'prod-server1' ip: '192.168.1.10' puertos: http: 80 https: 443 - nombre: 'prod-server2' ip: '192.168.1.11'
Definición de claves y valores mediante “:”
YAML así como otros formatos como JSON utiliza de manera recurrente diccionario clave valor. En el caso de YAML no hace falta introducir las claves y los valores entre comillas y simplemente se separan con el carácter «:».
En el ejemplo de código anterior puedes encontrar varias claves como «servidores» o «puertos». Verás que todas tienen «:» seguido por un espacio y a continuación el valor.
Representación de listas con guiones “-”
Las listas de elementos se colocan con un carácter «-» seguido de un espacio y el elemento de la lista que queramos indicar.
frutas: - manzana - plátano - cereza - naranja
Con estas sencillas reglas tenemos ya prácticamente todo lo que necesitamos para poder trabajar con YAML, ya que el resto de las normas son todas bastante intuitivas
Diferencias entre YAML y otros formatos como JSON o XML
YAML compite en popularidad con otros sistemas de intercambio de datos como XML y JSON. Si ya tienes claro los usos de este formato seguramente entiendas perfectamente donde le puedes sacar partido a YAML.
Sus diferencias más destacables frente a otros lenguajes de intercambio de datos son diversas.
Sintaxis más limpia y fácil de leer que JSON y XML
Todos los formatos de intercambio de datos funcionan con archivos de texto, lo que hace que sean de fácil lectura para cualquier sistema informático. Sin embargo, si nos referimos a la lectura por humanos YAML destaca especialmente, ya que su sintaxis permite interpretar los datos con un vistazo rápido.
Mayor flexibilidad para representar estructuras complejas
Otra cosa que también está muy bien cuando utilizamos YAML es su flexibilidad a la hora de representar estructuras complejas. No se trata de un formato rígido como el XML y permite una mayor flexibilidad que JSON, ya que existen por lo general varias maneras de expresar las estructuras de datos.
Este detalle puede ser positivo porque se consigue adaptar mejor a las costumbres y gustos de cada desarrollador, especialmente cuando queremos especificar representar estructuras complejas. Sin embargo, también pensamos que es justo mencionar que esta misma flexibilidad puede resultar un punto conflictivo para el formato YAML, ya que a veces la flexibilidad también hace que el formato pueda llegar a ser más frágil.
Menor necesidad de símbolos y delimitadores
Si abres un archivo XML verás que está lleno de caracteres de control para poder especificar elementos, como etiquetas de apertura y de cierre o atributos, etcétera. Incluso pasa lo mismo con un archivo JSON, donde encontrarás llaves por todas partes y comillas dobles.
En este sentido los archivos YAML consiguen ser bastante más limpios, ya que requieren una menor cantidad de símbolos para poder especificar la estructura y los datos en sí. Por tanto la densidad de información de un archivo YAML también será bastante mayor.
Ventajas en la gestión de configuraciones frente a JSON y XML
La definición de datos para la configuración de aplicaciones en YAML nos aporta algunas ventajas que conviene destacar. Primero tenemos todas las ventajas que hemos ido señalando ya en este post, como una facilidad de lectura mayor para los humanos, o la sintaxis menos verbosa.
En este caso en particular YAML ofrece algunas utilidades destacables como los alias, que facilitan la declaración de datos para configuración con menos duplicación de código y menor propensión a errores. Además, mediante YAML podemos introducir también comentarios en el código, lo que puede representar una ayuda a la hora de interpretar mejor las decisiones que hemos tomado para crear los archivos.
Conversión sencilla entre YAML y JSON en proyectos modernos
No obstante, lo cierto es que JSON es uno de los formatos más usados para intercambio de datos, por este motivo al diseñar YAML se han preocupado en hacer que la conversión sea sencilla. De hecho en la actualidad el estándar de YAML permite utilizar sintaxis JSON de manera nativa.
Esto quiere decir que cualquier archivo escrito con JSON válido es también un archivo YAML válido. Esta característica facilita de manera destacable la aplicación en proyectos modernos.
¿Para qué sirve YAML?
Como hemos dicho ya, YAML es un formato de intercambio de datos bastante popular, que también se usa en la actualidad para la definición de configuraciones, incluso para la creación de infraestructura cloud de manera declarativa. Vamos a ver algunos de los usos más relevantes hoy en día.
Uso de YAML en la configuración de aplicaciones
Cada día más aplicaciones utilizan YAML para definir sus archivos de configuración, debido a las características ya señaladas como facilidad de lectura y versatilidad en su código.
YAML en entornos DevOps y CI/CD
Pero donde realmente YAML se ha convertido en el lenguaje más extendido es en entornos DevOps. Herramientas tan populares como Docker, Kubernetes o Ansible, por poner sólo algunos ejemplos, usan este formato. Además, la mayoría de los pipelines de CI/CD se escriben en YAML como en la plataforma de GitHub Actions, GitLab CI/CD o Azure DevOps.
Aplicaciones de YAML en Kubernetes y Docker Compose
Dos ejemplos claros sobre herramientas DevOps, como decimos, son Kubernetes y Docker Compose, donde se usa YAML.
YAML en automatización e infraestructura como código
En el área de automatización e infraestructura como código se usa YAML en plataformas como Ansible, Terraform, Helm, CircleCI, ArgoCD, o Jenkins.
YAML en herramientas de desarrollo y API
Aunque para API generalmente se usa JSON, también es posible utilizar el formato YAML en algunos casos. Por ejemplo, en OpenAPI / Swagger es posible definir schemas con YAML. También lo puedes usar en numerosos frameworks cuando defines archivos de configuración como en Spring Boot, Apidog o NestJS.