Si usted es un desarrollador que escribe APIs, probablemente se haya topado con YAML aunque su herramienta de serialización principal sea JSON.

YAML tiene su propia sintaxis amigable, y es un lenguaje práctico para añadir a su arsenal de desarrollo.

Aprendamos lo básico de YAML.

Serialización de datos

Siempre que quiera enviar alguna estructura de datos o un objeto a través de redes informáticas, por ejemplo Internet, tendrá que convertirlo a un formato especial para poder leerlo y almacenarlo. Este proceso se conoce comúnmente como serialización y tiene una enorme importancia en la web. Un ejemplo de uso común de la serialización es cuando se leen datos de bases de datos y se transfieren a través de la web.

Algunas formaciones de serialización incluyen JSON, YAML, XML.

En este artículo, hablaré de YAML, y al final del artículo, usted será capaz de trabajar su camino a través de YAML y tener una idea clara acerca de YAML.

¿Qué es YAML?

YAML es un formato de serialización de datos que significa YAML ain’t Markup language.

La principal ventaja de utilizar YAML es la legibilidad y la capacidad de escritura. Si tiene un archivo de configuración que necesita ser más fácil de leer para los humanos, es mejor utilizar YAML. YAML no es una sustitución completa de JSON ya que JSON y XML también tienen su lugar; sin embargo, es útil aprender YAML.

Otra ventaja de YAML es su soporte de varios tipos de datos como casos, matrices, diccionarios, listas y escalares. Tiene un buen soporte para los lenguajes más populares como JavaScript, Python, Ruby, Java, etc.

YAML sólo admite espacios y distingue entre mayúsculas y minúsculas, así como entre espacios. Los tabuladores no se aceptan universalmente. Un archivo YAML tiene extensión .yaml.

Sintaxis básica de YAML

Todo YAML comienza con --- que denota el inicio de un archivo YAML.

Al crear una API, nos interesa una característica que proporciona YAML conocida como mapeo.

Los siguientes ejemplos muestran el ejemplo de mapeo en YAML.

---
nombre: James
chico: sí
PROMEDIO: 3.41

La sintaxis del mapeo es clave: valor. (Observe el espacio, es muy crucial en YAML, a diferencia de JSON o XML.

YAML también soporta tipos de datos como caracteres, cadenas, enteros, valores flotantes, y colecciones como arrays, listas que se construyen a partir de tipos de datos básicos.

Tipos de datos en YAML

Veamos el ejemplo de un YAML a continuación:

---

MACHO FALSE

NOTA MEDIA: 3.61

CUESTIONES: NULO

NOMBRE "HARRY"

EDAD 16

El primer tipo de datos es un booleano, donde puede tener dos valores: verdadero o falso. El valor de PAM es de coma flotante. YAML también admite el tipo de datos null, como tenemos para «Asuntos». El valor de «Nombre» es una cadena que debe entrecomillarse dentro de comillas dobles o simples. YAML también admite cadenas multilínea y cadenas de varias líneas como una sola para facilitar la lectura.

Cadenas multilínea y de una sola línea

---

Sobre: >

 Hola soy Ryan

 De Alabama y me gusta

 Jugar al fútbol.

El símbolo <i>></i> le permite escribir una cadena de una sola línea en varias líneas. La frase es en realidad una descripción de una sola línea aunque tengamos múltiples líneas.

También podemos tener cadenas de múltiples líneas si utilizamos el símbolo | como se permite:

Acerca de: |

 Esta es una cadena de varias líneas

 Y se imprimirá por líneas.

Lista

Las listas son muy importantes en YAML.

A continuación se da un ejemplo de lista.

---

- manzana

- plátano

- mango

A continuación se muestra el mapeo de escalares a listas, que es muy importante para la mayoría de los archivos de configuración.

---

Frutas:

 Manzana

 Plátano

 Guayaba 

El anidamiento es necesario para asignar escalares a listas. También podemos tener varias listas anidadas, como se muestra en el siguiente ejemplo.

Automóviles:

 Automóvil:

     Hyundai

     Volkswagen

     Ford

Aquí los automóviles están anidados dentro de los automóviles, y Hyundai está anidado dentro de los automóviles. Este es un ejemplo de anidamiento múltiple. Podemos tener anidamiento múltiple tanto como queramos.

Temas:

     Ingeniería:

       Ingeniería mecánica:

         Diseño y fabricación

         Automóvil

         Control y diseño

       Ingeniería civil:

         Ingeniería estructural

         Energía hidroeléctrica

       Arte:

         Medieval

         Moderna

         Pintura

YAML también proporciona los símbolos & y * como anclas y referencias al ancla para evitar la duplicación. Son esenciales en archivos de configuración en frameworks como Ruby on Rails para hacer el archivo YAML más pequeño.

Véase el siguiente ejemplo.

detalles: &detalles
    nombre: "Juan
    edad: 18
profesión: ingeniero

<< : * detalles

que equivale a

profesión: ingeniero

nombre: "Juan"

edad 18

YAML en Python

Python soporta YAML, incluyendo algunos módulos como ruamel y pyyaml. Comience instalando pyyaml

pip install pyyaml

Para el tutorial, cree un archivo con nombre details.yaml

nombre: "juan"

edad:18

sexo: masculino

Cree otro archivo llamado feed.yaml con el siguiente contenido:

deportes:

 fútbol
 baloncesto
 críquet
 béisbol

---
países:
 Brasil
 Lituania
 Australia
 EE.UU

Empecemos leyendo el archivo details.yaml

importar yaml

con open('detalles.yaml') como f:
    
    datos = yaml.load(f, Loader=yaml.FullLoader)
    print(datos)

Tras ejecutar el archivo details.py, obtenemos la siguiente salida

 $ python detalles.py
{'nombre': "juan", 'edad': 18, 'sexo': masculino}
importar yaml

with open(r'feed.yaml') as file:
    # El parámetro FullLoader se encarga de la conversión de YAML
    # valores escalares a Python el formato diccionario
    lista_frutas = yaml.load(file, Loader=yaml.FullLoader)

    print(lista_frutas)

Escribir YAML en archivos en Python

importar yaml

dict_file = [{'deportes' : ['hockey', 'rugby', 'tenis', 'ping pong', 'fútbol', 'bádminton']},
{'países' : ['Jamaica', 'Inglaterra', 'Nepal', 'Países Bajos', 'Sudáfrica', 'Bolivia', 'Portugal']}]

with open(r'E:\data.yaml', 'w') as file: #crea un nuevo archivo yaml 
    datos = yaml.dump(archivo_dict, archivo)

Implementación de YAML en Node.js

Node.js es un lenguaje de procesamiento del lado del servidor, y la serialización de datos es de enorme importancia en el proceso de desarrollo.

Para nuestro tutorial, consideremos el siguiente archivo ejemplo.yaml:

nombre:Juan

edad:18

Aficiones:

 Afición1:Fútbol

 Hobby2:Baloncesto

 Hobby3:Hockey

Trabajo

-Administrador de sistemas

-Programador

Tenemos una librería npm disponible para Node.js llamada js-yaml. Empecemos instalando el módulo mediante

npm install js-yaml

Luego usamos el módulo js-yaml en nuestro archivo.

const yaml = require('js-yaml'); //inicializar js-yaml
const fs = require('fs'); //inicializar filestream

try {
  const result = yaml.load(fs.readFileSync('ejemplo.yml', 'utf8'));
  console.log(resultado);
} catch (e) {
  console.log(e); //catch exception
}

Palabras finales

En la programación moderna, los marcos de trabajo y las aplicaciones en las que se almacenan o distribuyen datos, YAML es cada vez más común en los archivos de configuración. YAML se dirige a muchas de las mismas aplicaciones de comunicación que el Lenguaje Extensible de Marcado (XML), pero tiene una sintaxis mínima que difiere deliberadamente del XML.

Los archivos YAML pueden crearse para estructuras de datos fijas mediante comandos de impresión que escriben tanto los datos como la decoración particular de YAML. Sin embargo, es preferible utilizar un emisor de YAML específico para volcar datos jerárquicos diversos o complejos. Del mismo modo, con expresiones regulares, los archivos YAML básicos (por ejemplo, pares clave-valor) se analizan fácilmente.