YAML: Archivos de Configuración Sin el Desorden
Por qué YAML se convirtió en el estándar para archivos de config y cómo evitar sus peculiaridades.
Cada manifiesto de Kubernetes. Cada flujo de trabajo de GitHub Actions. Cada archivo Docker Compose.
YAML está en todos lados para configuración. Es legible, es flexible y tiene algunas peculiaridades sorprendentes.
¿Por Qué YAML?
JSON es estricto: comillas dobles, sin comentarios, sin comas finales.
YAML es permisivo: sintaxis mínima, comentarios permitidos, legible para humanos.
# Configuración YAML
database:
host: localhost
port: 5432
name: miapp
{
"database": {
"host": "localhost",
"port": 5432,
"name": "miapp"
}
}
Mismos datos, menos ruido en YAML.
Lo Básico
Pares clave-valor:
nombre: Juan
edad: 30
Estructuras anidadas (usa espacios, no tabs):
persona:
nombre: Juan
edad: 30
Listas:
colores:
- rojo
- verde
- azul
Listas y objetos en línea:
colores: [rojo, verde, azul]
persona: {nombre: Juan, edad: 30}
El Problema de Noruega
pais: NO
¿Qué es NO? Un booleano false. YAML interpreta NO, Yes, on, off y otros como booleanos.
El código de país de Noruega se convierte en false. Tu configuración se rompe de maneras misteriosas.
Solución: Pon entre comillas cadenas que podrían interpretarse como booleanos.
pais: "NO"
El Problema de Cadena Multilínea
descripcion: Esta es una larga
descripcion que continua
¿Son dos líneas o una con "que continua" indentado? Depende del analizador YAML.
Multilínea explícita:
# Literal (preserva saltos de línea)
descripcion: |
Línea uno
Línea dos
# Plegado (une líneas)
descripcion: >
Esta es una línea
larga cuando se analiza
La Indentación Es Significativa
Dos espacios. No tabs. No un espacio. No tres.
# Correcto
padre:
hijo: valor
# Incorrecto - carácter tab
padre:
hijo: valor
Mezclar tabs y espacios rompe YAML silenciosamente. Configura tu editor para usar espacios.
Interpretación de Números
version: 1.10
¿Es eso la cadena "1.10" o el número 1.1? La mayoría de analizadores lo interpretan como 1.1.
La matemática de punto flotante ataca de nuevo. Pon entre comillas los números de versión.
version: "1.10"
Anclas y Alias
YAML puede referenciar contenido repetido:
defaults: &defaults
timeout: 30
reintentos: 3
produccion:
<<: *defaults
timeout: 60
Poderoso para reducir duplicación. Confuso cuando se exagera.
Validando YAML
La flexibilidad de YAML significa que muchas cosas que parecen válidas no lo son.
- Usa un linter en tu editor
- Valida contra un esquema cuando sea posible
- Convierte a JSON para ver qué interpretó realmente el analizador
Si tu config no está funcionando, verifica qué ve el analizador, no lo que escribiste.
YAML vs JSON vs TOML
YAML: Legible para humanos, muchas características, casos extremos peculiares.
JSON: Estricto, simple, ampliamente soportado, verboso.
TOML: Explícito, menos sorpresas, ganando popularidad para configs.
Para datos máquina-a-máquina, JSON es más seguro. Para configs editados por humanos, YAML funciona si conoces las peculiaridades.
YAML prioriza legibilidad sobre estrictez. Ese compromiso crea casos extremos. Pon entre comillas cadenas que parecen booleanos o números, usa sintaxis multilínea explícita y valida antes de desplegar.