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.