Domine o YAML: Guia Completo para Iniciantes (com Python e Node.js)

Se você desenvolve APIs, é provável que já tenha se deparado com YAML, mesmo que o JSON seja seu principal formato de serialização. O YAML, com sua sintaxe clara e intuitiva, é uma adição valiosa ao seu conjunto de ferramentas de desenvolvimento.

Vamos explorar os fundamentos do YAML e entender como ele pode ser útil no seu dia a dia.

Serialização de Dados

Ao transmitir estruturas de dados ou objetos através de redes, como a internet, é necessário convertê-los para um formato que possa ser lido e armazenado de maneira eficiente. Esse processo, conhecido como serialização, é crucial na web. Um exemplo comum é a leitura de dados de bancos de dados e sua transferência pela internet.

Existem diversos formatos de serialização, incluindo JSON, YAML e XML.

Este artigo foca no YAML, e ao final da leitura, você terá um bom entendimento sobre ele, permitindo que você trabalhe com arquivos YAML.

O Que é YAML e Quais Seus Benefícios?

YAML, que significa “YAML Ain’t Markup Language,” é um formato de serialização de dados, e não uma linguagem de marcação. Sua principal vantagem é a facilidade de leitura e escrita. Se você precisa de um arquivo de configuração que seja facilmente compreensível por humanos, o YAML é a escolha ideal. Embora não seja um substituto para JSON ou XML, o YAML tem seu espaço e é uma habilidade útil para se ter.

Além da legibilidade, o YAML suporta diversos tipos de dados, como mapas (objetos), sequências (arrays), listas e valores escalares. Ele possui compatibilidade com várias linguagens populares, incluindo JavaScript, Python, Ruby e Java.

O YAML é sensível a espaços e distingue entre maiúsculas e minúsculas, além de não aceitar tabulações. Os arquivos YAML possuem a extensão .yaml.

Sintaxe Básica do YAML

Todo arquivo YAML começa com “—“, que indica o início do documento. Ao trabalhar com APIs, o recurso de mapeamento do YAML é particularmente útil.

Vejamos um exemplo de mapeamento em YAML:

---
nome: João
ativo: sim
nota: 3.41

A sintaxe de mapeamento é chave: valor. Note que o espaço após os dois pontos é fundamental no YAML, diferentemente do JSON ou XML.

O YAML também suporta tipos de dados como caracteres, strings, números inteiros, valores de ponto flutuante e coleções como arrays e listas, que são construídas a partir de tipos de dados básicos.

Tipos de Dados em YAML

Observe o exemplo YAML abaixo:

---

SEXO: FALSO

NOTA: 3.61

PROBLEMAS: NULO

NOME: "ANA"

IDADE: 17

O primeiro dado é um booleano, que pode ser verdadeiro ou falso. O valor da nota (NOTA) é um número de ponto flutuante. O YAML também oferece suporte a valores nulos (PROBLEMAS). O nome (NOME) é uma string, que pode ser delimitada por aspas simples ou duplas. Além disso, o YAML permite strings de múltiplas linhas para melhorar a legibilidade.

Strings de Múltiplas e Uma Linha

---

Sobre: >

 Olá, eu sou a Maria

 Do Rio de Janeiro e gosto de

 Andar de bicicleta.

O símbolo > permite que você escreva uma string de uma linha em várias linhas. A frase, embora dividida em várias linhas, é tratada como uma única string.

Também é possível criar strings de múltiplas linhas usando o símbolo |:

Sobre: |

 Esta é uma string de várias linhas

 E será impressa linha por linha.

Listas

As listas são um elemento fundamental do YAML.

Um exemplo de lista:

---

- maçã

- banana

- manga

O mapeamento de escalares para listas, essencial em muitos arquivos de configuração, é mostrado abaixo:

---

Frutas:

 Maçãs

 Banana

 Goiaba 

O aninhamento é essencial para mapear escalares para listas. Também é possível aninhar várias listas, como no exemplo abaixo:

Automóveis:

 Carro:

     Fiat

     Volkswagen

     Ford

Neste caso, os carros estão aninhados em automóveis, e a Fiat está aninhada em carros. Este é um exemplo de aninhamento múltiplo, que pode ser usado em diversos níveis conforme a necessidade.

Matérias:

     Engenharia:

       Engenharia Mecânica:

         Projeto e Fabricação

         Automobilística

         Controle e Automação

       Engenharia Civil:

         Estruturas

         Hidráulica

       Artes:

         Medieval

         Moderna

         Pintura

O YAML também utiliza os símbolos & e * como âncoras e referências, respectivamente, para evitar duplicações. Essas funcionalidades são muito importantes em arquivos de configuração de frameworks como Ruby on Rails, pois reduzem o tamanho do arquivo YAML.

Veja o exemplo abaixo:

detalhes: &detalhes
    nome: "Carlos"
    idade: 22
profissão: engenheiro

<< : * detalhes

que é equivalente a:

profissão: engenheiro

nome: "Carlos"

idade: 22

YAML em Python

Python oferece suporte a YAML através de módulos como ruamel e pyyaml. Vamos começar instalando o pyyaml:

pip install pyyaml

Para este tutorial, crie um arquivo chamado details.yaml:

nome: "joão"

idade: 22

sexo: masculino

Crie outro arquivo chamado feed.yaml com o seguinte conteúdo:

esportes:

 futebol
 basquete
 vôlei
 natação

---
países:
 Brasil
 Argentina
 Chile
 Portugal

Vamos ler o arquivo details.yaml:

import yaml

with open('details.yaml') as f:

    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

Ao executar o arquivo details.py, você verá a seguinte saída:

 $ python details.py
{'nome': "joão", 'idade': 22, 'sexo': 'masculino'}
import yaml

with open('feed.yaml') as file:
    # O parâmetro FullLoader converte os valores escalares YAML
    # para o formato de dicionário do Python
    dados = yaml.load(file, Loader=yaml.FullLoader)

    print(dados)

Escrevendo YAML em Arquivos com Python

import yaml

dict_file = [{'esportes' : ['hóquei', 'rugby', 'tênis', 'ping pong', 'futebol', 'badminton']},
{'países' : ['Jamaica', 'Inglaterra', 'Nepal', 'Holanda', 'África do Sul', 'Bolívia', 'Portugal']}]

with open('dados.yaml', 'w') as file: #cria um novo arquivo yaml
    data = yaml.dump(dict_file, file)

Implementando YAML em Node.js

Node.js é uma linguagem de processamento do lado do servidor, e a serialização de dados é vital no processo de desenvolvimento.

Para nosso exemplo, use o seguinte arquivo example.yaml:

nome: José

idade: 25

Hobbies:

 Hobby1: Futevôlei

 Hobby2: Natação

 Hobby3: Caminhada

Profissão:

- Analista de sistemas

- Desenvolvedor

Utilizaremos a biblioteca npm chamada js-yaml. Instale o módulo com o comando:

npm install js-yaml

Em seguida, utilize o módulo js-yaml no seu arquivo:

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

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

Conclusão

O YAML está se tornando cada vez mais comum em arquivos de configuração em estruturas e aplicações de programação modernas, nas quais os dados são armazenados ou distribuídos. Apesar de o YAML ser usado para muitas das mesmas aplicações de comunicação que o XML (Extensible Markup Language), ele possui uma sintaxe mais simples e que é, intencionalmente, diferente do XML.

Arquivos YAML podem ser criados para estruturas de dados fixas com comandos de impressão que registram os dados e a decoração específica do YAML. No entanto, um emissor YAML dedicado é preferível para gerar dados hierárquicos diversos ou complexos. Similarmente, com expressões regulares, arquivos YAML básicos, como pares chave-valor, podem ser facilmente analisados.