O que é o formato de ficheiro YAML?
.yaml é um formato de arquivo de texto usado para trocar dados entre várias aplicações. YAML - abreviação de *YAML Ain't Markup Language* - é um padrão para organizar informações em um formato legível por humanos e independente de plataforma, usando pares key: value baseados em indentação codificados em UTF-8. A análise de arquivos .yaml requer a instalação de uma biblioteca YAML; bibliotecas populares incluem PyYAML (Python), js-yaml (JavaScript) e SnakeYAML (Java). Arquivos .yaml às vezes são salvos com a extensão .yml, que é funcionalmente idêntica. Além do intercâmbio de dados, os arquivos .yaml são normalmente usados para serializar dados e para escrever arquivos de configuração em ferramentas como Docker Compose, Kubernetes e GitHub Actions.
Serialização
A serialização é um termo usado na ciência da computação. É o processo de traduzir dados ou objetos em um formato que possa ser armazenado, transmitido e reconstruído posteriormente. Por exemplo, duas instituições que trocam dados em um formato padronizado usando aplicações diferentes devem serializar esses dados antes de enviá-los. Os dados serializados também podem ser armazenados em um arquivo - .yaml, .xml, .json, .toml, etc. - e depois enviados aos destinatários.
Um documento .yaml pode opcionalmente começar com o marcador de início de documento --- e terminar com ...; isso também permite múltiplos documentos dentro de um único arquivo. Desde o YAML 1.2 (2009, revisado em 2021), todo arquivo JSON válido também é um YAML válido.
Segurança e proteção
RISCO: MEDIUMUm arquivo YAML é texto simples e não é executado por conta própria, portanto, a leitura é segura. Dois riscos reais: (1) YAMLs de configuração (pipelines de CI, Compose, K8s, Ansible) frequentemente contêm segredos - tokens, senhas, chaves - portanto, não os cole em validadores online não confiáveis nem os envie para repositórios públicos. (2) Perigo programático: carregar YAML não confiável com um analisador inseguro (ex: yaml.load do PyYAML em vez de yaml.safe_load) pode executar objetos/código arbitrário - use sempre o carregador seguro para arquivos em que você não confia. Risco de edição: um tab ou um espaço desalinhado altera silenciosamente o significado, portanto, valide após editar.
Detalhes do formato
em resumoProgramas que abrem arquivos YAML
Detalhes técnicos
especificação profunda| Extensão de arquivo | .yaml (também .yml) |
| Tipo MIME | application/yaml |
| Codificação | Texto simples UTF-8; sem cabeçalho binário ou magic bytes |
| Estrutura | Pares key: value baseados em indentação; a indentação usa apenas espaços - tabs são proibidos pela especificação |
| Marcadores de documento | --- marca o início do documento, ... marca o fim do documento; múltiplos documentos podem coexistir em um arquivo |
| Tipos de dados nativos | Strings, inteiros, floats, booleanos, null, sequências (listas), mapeamentos (dicionários), timestamps |
| Versão da especificação | YAML 1.2 (2009, revisado em 2021); substitui YAML 1.1 (2005) e YAML 1.0 (2001) |
| Compatibilidade com JSON | Desde o YAML 1.2, todo documento JSON válido também é um YAML válido - o JSON é um subconjunto estrito |
| Comentários | Comentários de linha única introduzidos por # ; podem aparecer em sua própria linha ou inline após um valor |
| Strings multilinha | Escalar de bloco literal (|) preserva quebras de linha; escalar dobrado (>) converte quebras de linha em espaços |
| Âncoras e aliases | & define uma âncora nomeada e * faz a referência (alias) a ela, permitindo o reuso de valores sem duplicação |
| Desenvolvedores | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Casos de uso comuns | Arquivos de configuração (Kubernetes, Docker Compose, GitHub Actions, Ansible), serialização de dados, definições OpenAPI |
| Uso de aspas | Strings sem aspas, com aspas simples ('...') e aspas duplas ("...") são todas suportadas; aspas duplas permitem sequências de escape |
| Lançado | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | yaml.org |