Skip to content
Back to Blog
informational

O Que É YAML? A Linguagem de Dados Amigável para Humanos

2026-05-17 9 min read

YAML em Termos Simples

O nome completo de YAML é 'YAML Ain't Markup Language' (YAML Não É Linguagem de Marcação) — uma piada recursiva que já diz o que não é. Não serve para marcar documentos como HTML. Em vez disso, YAML é um formato de serialização de dados projetado para ser legível e editável por uma pessoa sem ter um manual aberto na aba ao lado. Ele apareceu pela primeira vez em 2001, uma criação de Clark Evans, Ingy döt Net e Oren Ben-Kiki. Desde então, tornou-se a linguagem de configuração padrão para ferramentas essenciais como Kubernetes, Ansible, GitHub Actions, Docker Compose e Ruby on Rails. Em sua essência, YAML usa indentação para representar estruturas de dados como pares chave-valor e listas. Você não encontrará colchetes angulares ou chaves aqui. Um arquivo Docker Compose simples mostra isso claramente: version: '3.9' services: web: image: nginx:latest ports: - '80:80' Compare isso com o JSON equivalente e o apelo é óbvio. Sem vírgulas, sem aspas nas chaves e sem chaves de fechamento para não coincidir. A desvantagem é que a indentação se torna significativa. Erre por apenas um espaço, e o arquivo pode não ser analisado ou, pior, significar silenciosamente algo totalmente diferente. Essa tensão entre leitura fácil e estrutura rígida define a experiência YAML. Ficar à vontade com ele é a chave para usar bem o formato.

Como YAML Estrutura Dados: Os Três Blocos Construtores

Todo documento YAML é composto pelas mesmas partes básicas: escalares, sequências e mapeamentos. Um escalar é apenas um único valor, como uma string, um número, um booleano ou nulo. YAML é inteligente ao inferir o tipo, o que é geralmente útil, mas às vezes pode sair pela culatra. A string 'yes' é analisada como um booleano `true` no padrão YAML 1.1 mais antigo, que ainda é usado por PyYAML e outras ferramentas legadas. O YAML 1.2, no entanto, a trata corretamente como uma string simples. Essa lacuna de versão causou bugs de produção reais, então você precisa saber absolutamente qual parser suas ferramentas estão usando. Uma sequência é apenas uma lista ordenada. Você a escreve com um traço inicial e um espaço: fruits: - apple - banana - mango Um mapeamento é um conjunto de pares chave-valor, que é o que você verá com mais frequência em arquivos de configuração. Você pode aninhar mapeamentos em qualquer profundidade, e a estrutura é definida puramente por indentação consistente. A especificação YAML é clara sobre isso: você deve usar espaços, nunca tabulações. YAML também oferece recursos poderosos para reduzir a repetição. Âncoras (&) e aliases (*) permitem que você defina um bloco de dados uma vez e o reutilize em outro lugar. Isso é um salva-vidas em pipelines de CI/CD onde vários trabalhos podem compartilhar exatamente o mesmo bloco de variáveis de ambiente. Para strings longas, YAML tem dois estilos de bloco: o escalar de bloco literal (|) preserva as quebras de linha exatamente, enquanto o escalar de bloco dobrado (>) as colapsa em espaços. Isso é perfeito para comandos de shell longos que você deseja manter legíveis no arquivo sem adicionar quebras de linha reais ao próprio comando.

Onde YAML É Realmente Usado

YAML prospera no mundo da infraestrutura e das ferramentas de desenvolvimento. Os números não mentem. Em 2024, o GitHub Actions processa mais de 100 milhões de execuções de fluxo de trabalho diariamente, cada uma delas impulsionada por um arquivo .yml no diretório .github/workflows de um projeto. O Kubernetes, o motor por trás da maioria dos aplicativos nativos da nuvem, depende do YAML para definir cada recurso: Deployments, Services, ConfigMaps, o que você quiser. Um aplicativo de microsserviços típico pode facilmente acumular centenas de arquivos YAML. O Ansible, a ferramenta de automação de TI usada por mais de 25.000 organizações (de acordo com a Red Hat), usa YAML para todos os seus playbooks. Uma tarefa padrão em um playbook Ansible se parece com isto: - name: Install nginx ansible.builtin.package: name: nginx state: present Além da esfera DevOps, você encontrará YAML em geradores de sites estáticos como o Jekyll, que usa o front matter YAML para armazenar metadados em arquivos Markdown. Ferramentas de teste de API como Hoppscotch e Insomnia o utilizam para configuração de ambiente. Até pipelines de ciência de dados o utilizam; ferramentas como DVC (Data Version Control) rastreiam parâmetros de experimentos em arquivos YAML. Um lugar onde você não verá muito YAML é na troca de dados entre serviços web. As APIs REST quase universalmente usam JSON para corpos de requisição e resposta. Por quê? Porque os parsers JSON são incorporados em todos os navegadores, e a rigidez do formato não deixa margem para ambiguidade. Esta é a distinção principal: YAML é para humanos editando arquivos em disco; JSON é para máquinas que passam dados por uma rede. Lembrar dessa regra simples evitará muita confusão sobre qual formato escolher.

YAML vs. JSON vs. TOML: Escolhendo o Formato Certo

Ao escolher um formato de configuração, você geralmente está escolhendo entre YAML, JSON e TOML. Cada um tem uma personalidade distinta. JSON (JavaScript Object Notation) é o mais rigoroso. Toda string deve ser entre aspas, toda lista e objeto explicitamente fechados, e não tem suporte para comentários. Este último é uma grande fonte de frustração para desenvolvedores que desejam anotar a configuração. Mas a força do JSON é sua análise rígida e inequívoca; quaisquer dois parsers compatíveis produzirão estruturas de dados idênticas a partir da mesma entrada. Seu tamanho de arquivo é geralmente comparável ao YAML para configurações típicas. TOML (Tom's Obvious, Minimal Language) foi criado para corrigir a falta de comentários do JSON e as regras complicadas de espaço em branco do YAML. Ele usa uma sintaxe no estilo INI e foi adotado pelo gerenciador de pacotes Cargo do Rust e pelo padrão pyproject.toml do Python. TOML é fantástico para configurações planas ou aninhadas superficialmente, mas fica desajeitado e prolixo quando você precisa representar dados profundamente aninhados. Então, onde o YAML se encaixa? YAML é o vencedor claro quando sua configuração tem profundidade de aninhamento significativa, quando você pode usar âncoras e aliases para eliminar a repetição, ou quando pessoas não técnicas precisam editar o arquivo. É a escolha errada quando sua equipe está constantemente lutando contra erros de indentação ou quando a inferência de tipo cria surpresas (como o infame problema da Noruega, onde o código do país 'NO' foi analisado como booleano `false`). Se você precisar converter entre formatos, o CocoConvert oferece conversões confiáveis de YAML para JSON e JSON para YAML. No entanto, ele não suporta TOML como formato de saída. Se você precisar converter de YAML para TOML, terá que usar uma ferramenta de linha de comando como `yq`. É melhor saber disso de antemão.

Erros Comuns em YAML e Como Evitá-los

A única fonte mais comum de erros em YAML é a indentação inconsistente. Qualquer um que tenha passado uma hora depurando um pipeline de CI apenas para encontrar um único espaço fora do lugar conhece essa dor. Ao contrário do Python, que aceita qualquer largura de indentação consistente, YAML exige que as chaves irmãs no mesmo nível tenham exatamente a mesma indentação. Misturar indentação de dois e quatro espaços em um arquivo causará um erro de análise ou, muito pior, reestruturará silenciosamente seus dados. A única maneira segura de trabalhar é configurar seu editor para usar espaços para tabulações e impor um tamanho de indentação consistente. Dois espaços é o padrão de fato para Kubernetes e GitHub Actions. Caracteres especiais não entre aspas são outra armadilha. Um dois pontos seguido por um espaço é um separador chave-valor, então uma string como 'http://example.com:8080' deve ser entre aspas. Esqueça as aspas, e você terá um erro de análise. Da mesma forma, valores que começam com `{`, `[` ou `%` precisam de aspas porque têm um significado especial na sintaxe YAML. Depois, há as surpresas de coerção de tipo. Já mencionamos como 'no' pode se tornar `false`. Mas você sabia que números com zeros à esquerda podem ser analisados como inteiros octais? O valor 0755, uma permissão de arquivo Unix comum, torna-se decimal 493, a menos que você o coloque entre aspas. Datas são outro campo minado; 2024-01-01 sem aspas se torna um objeto de data, não uma string, o que pode quebrar ferramentas que esperam uma string. A melhor defesa é lintar seu YAML antes de confirmá-lo. `yamllint` é uma ferramenta de linha de comando essencial que detecta erros de indentação, espaços em branco à direita e outros problemas comuns. Seu pipeline de CI deve absolutamente incluir uma etapa `yamllint`. Para uma verificação rápida e única, colar seu arquivo no conversor YAML para JSON do CocoConvert é um ótimo teste de sanidade. Se a estrutura JSON resultante não se parecer com o que você pretendia, seu YAML tem um problema.

Convertendo Arquivos YAML: O Que o CocoConvert Pode Fazer

O CocoConvert oferece ferramentas para as duas necessidades de conversão mais comuns: YAML para JSON e JSON para YAML. O processo é simples: cole seu conteúdo ou carregue um arquivo .yaml, escolha seu formato de destino e baixe o resultado. O conversor preserva com precisão a estrutura aninhada de seus dados. Ele também lida corretamente com arquivos YAML de vários documentos (onde os documentos são separados por ---), convertendo cada um em um objeto JSON separado dentro de um array maior. Ao converter YAML para JSON, a saída é formatada com uma indentação padrão de dois espaços, tornando-a legível e compatível com quase todas as ferramentas JSON. Se você precisar de uma string JSON compacta e de uma linha — talvez para uma variável de ambiente ou para reduzir o tamanho da carga útil — uma opção de minificação está disponível na página de resultados. Ao converter de JSON para YAML, o conversor usa indentação de dois espaços e omite o marcador de início de documento (---) para documentos únicos. Se a entrada contiver vários objetos JSON, cada um se torna um documento YAML distinto separado pelo marcador `---`. Crucialmente, ele automaticamente coloca entre aspas os valores de string que poderiam ser mal interpretados como booleanos, nulos ou números, para que você não precise se preocupar com uma string como 'true' ou '1.0' causando problemas. Sejamos diretos sobre as limitações. O CocoConvert não preserva comentários YAML durante a conversão. Isso não é uma deficiência da ferramenta; os comentários não fazem parte do modelo de dados formal do YAML, então eles são removidos pelo parser. Âncoras e aliases também são resolvidos, o que significa que a saída final conterá valores repetidos em vez de referências. Finalmente, arquivos muito grandes (mais de 10 MB) podem esgotar o tempo limite no nível gratuito. Para esses grandes trabalhos, uma ferramenta de linha de comando como `yq` é a melhor escolha.

Quando Usar YAML e Quando Recuar

YAML é a ferramenta certa para o trabalho quando algumas condições são atendidas. O arquivo será lido e editado por humanos, os dados têm uma estrutura aninhada significativa e o ecossistema circundante já usa YAML. Manifestos do Kubernetes, pipelines de CI/CD e playbooks Ansible são os exemplos perfeitos para isso. Tentar usar JSON nesses cenários apenas torna a vida mais difícil sem nenhum benefício real. Por outro lado, YAML é a escolha errada quando um arquivo é tocado apenas por máquinas. Para comunicação máquina a máquina, use JSON ou um formato binário mais eficiente como MessagePack ou Protocol Buffers. Também é uma escolha ruim se sua equipe constantemente luta com erros de indentação e não tem a disciplina de usar um linter. Nessa situação, a sintaxe mais simples do TOML, ou mesmo um arquivo JSON pré-processado, levará a menos incidentes de produção. Se você estiver usando YAML em projetos Python, há um risco de segurança crítico que você deve entender. A função `yaml.load()` padrão do PyYAML pode executar código arbitrário incorporado em um arquivo YAML. Se você estiver analisando YAML de uma fonte não confiável, você deve sempre usar `yaml.safe_load()`. Esta não é uma vulnerabilidade teórica; ela foi explorada em ataques reais à cadeia de suprimentos. O formato está conosco há mais de duas décadas e não vai a lugar nenhum. A especificação YAML 1.2, que corrigiu a maioria dos problemas irritantes de coerção de tipo da versão 1.1, agora é amplamente suportada por parsers modernos como PyYAML 6.0+, js-yaml 4.x e yaml.v3 do Go. Minha recomendação mais forte: se você estiver trabalhando em um projeto que depende muito de YAML, migrar para um parser compatível com 1.2 é a atualização mais impactante que você pode fazer. Isso eliminará uma classe inteira de bugs sutis sem que você precise alterar uma única linha de configuração.