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.