Si eres un desarrollador que escribe API, probablemente te hayas encontrado con YAML aunque tu herramienta de serialización principal sea JSON.

YAML tiene su propia sintaxis amigable y es un lenguaje útil para agregar a su arsenal de desarrollo.

Aprendamos los conceptos básicos de YAML.

Data serialization

Siempre que desee enviar alguna estructura de datos o un objeto a través de redes informáticas, digamos Internet, debe convertirlo en un formato especial para leerlo y almacenarlo. El proceso se conoce comúnmente como serialización y es de enorme importancia en la web. Un ejemplo de uso común de serialización es al leer datos de bases de datos y transferirlos a través de la web.

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

En este artículo, hablamos sobre YAML, y al final del artículo, podrá trabajar en YAML y tener una introducción clara a YAML.

¿Qué es YAML y cómo me beneficia?

YAML es un formato de serialización de datos que significa YAML no es lenguaje de marcado.

La principal ventaja de usar YAML es la legibilidad y la capacidad de escritura. Si tiene un archivo de configuración que debe ser más fácil de leer para los humanos, es mejor usar 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.

Otro beneficio de YAML es que admite varios tipos de datos como casos, matrices, diccionarios, listas y escalares. Tiene un buen soporte para los lenguajes más populares como JavaScript, Python, Rubí, Java, etc.

YAML solo admite espacios, y distingue entre mayúsculas y minúsculas y espacio. Las pestañas no se aceptan universalmente. Un archivo YAML tiene .yaml extensión.

Basic YAML syntax

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

En el momento en que creando una API, estamos interesados ​​en una función proporcionada por YAML conocida como mapeo.

Los siguientes ejemplos muestran el ejemplo de mapeo en YAML.

---
name: James
boy: yes
GPA: 3.41

La sintaxis de mapeo es clave: valor. (Tenga en cuenta el espacio, es muy importante en YAML, a diferencia de JSON o XML.

YAML también admite tipos de datos como caracteres, cadenas, números enteros, valores flotantes y colecciones como matrices, 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:

---

MALE: FALSE

GPA: 3.61

ISSUES: NULL

NAME: “BIGYAN”

AGE: 16

El primer tipo de datos es un booleano, donde puede tener dos valores: verdadero o falso. El valor de GPA es de punto flotante. YAML también admite el tipo de datos nulo como tenemos para "Cuestiones". El valor de "Nombre”Es una cadena que debe estar entre comillas simples o dobles. YAML también admite cadenas de líneas múltiples y cadenas de líneas múltiples como una sola para facilitar la lectura.

Cadenas multilínea y de una sola línea

---

About: >

 Hello this is Ryan

 From Alabama and I like to

 Play soccer.

El <i>></i> El símbolo le permite escribir una cadena de una sola línea en varias líneas. La oración es en realidad una descripción de una sola línea, aunque tenemos varias líneas.

También podemos tener múltiples cadenas de línea si usamos el | símbolo como permitido:

About: |

 This is a multiline string

 And will be printed line wise.

Lista

Las listas son muy importantes en YAML.

A continuación se ofrece un ejemplo de la lista.

---

- apple

- banana

- mango

A continuación se muestra la asignación de escalares a listas, lo cual es muy importante para la mayoría de los archivos de configuración.

---

Fruits:

 Apples

 Banana

 Guava 

Se requiere anidación para mapear escalar a lista. También podemos tener varias listas anidadas, como se muestra en el siguiente ejemplo.

Automobiles:

 Car:

     Hyundai

     Volkswagen

     Ford

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

Subjects:

     Engineering:

       Mechanical engineering:

         Design and manufacture

         Automobile

         Control and Design

       Civil engineering:

         Structural engineering

         Hydropower

       Arts:

         Medieval

         Modern

         Painting

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

Vea el ejemplo a continuación

<span class="hljs-attr">details:</span> <span class="hljs-meta">&details</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">"John"
</span>    age: 18
profession: engineer

<< : * details

que es equivalente a:

profession: engineer

name: "John"

age: 18

YAML in Python

Python admite YAML, incluidos algunos módulos como ruamel y pyyaml. Comience instalando pyyaml

pip install pyyaml

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

name: "john"

age:18

gender: male

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

sports:

 football
 basketball
 cricket
 baseball

---
countries:
 Brazil
 Lithuania
 Australia
 USA

Empecemos leyendo el archivo details.yaml

import yaml

with open('details.yaml') as f:
    
    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

Después de ejecutar el archivo details.py, obtenemos el siguiente resultado

 $ python details.py
{'name': "john", 'age': 18, 'gender': male}
import yaml

with open(r'feed.yaml') as file:
    # The FullLoader parameter handles the conversion from YAML
    # scalar values to Python the dictionary format
    fruits_list = yaml.load(file, Loader=yaml.FullLoader)

    print(fruits_list)

Writing YAML to Files in Python

import yaml

dict_file = [{'sports' : ['hockey', 'rugby', 'tennis', 'ping pong', 'football', 'badminton']},
{'countries' : ['Jamaica', 'England', 'Nepal', 'Netherlands', 'South Africa', 'Bolivia', 'Portugal']}]

with open(r'E:\data.yaml', 'w') as file: #create a new yaml file 
    data = yaml.dump(dict_file, file)

YAML implementation in 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 example.yaml:

name:John

age:18

Hobbies:

 Hobby1:Football

 Hobby2:BasketBall

 Hobby3:Hockey

Job:

-System administrator

-Programmer

Tenemos una biblioteca npm disponible para Node.js llamada js-yaml. Comencemos instalando el módulo por

npm install js-yaml

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

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

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

Conclusión

In programación moderna frameworks y aplicaciones donde se almacenan o distribuyen datos, YAML es cada vez más común en los archivos de configuración. YAML apunta a muchas de las mismas aplicaciones de comunicación que el lenguaje de marcado extensible (XML), pero tiene una sintaxis mínima que es deliberadamente diferente de XML.

Los archivos YAML se pueden crear para estructuras de datos fijas utilizando comandos de impresión que escriben tanto los datos como la decoración particular de YAML. Sin embargo, es preferible un emisor YAML dedicado para volcar varios o complejos datos jerárquicos. De manera similar, con las expresiones regulares, los archivos YAML básicos (por ejemplo, pares clave-valor) se analizan fácilmente.