Что такое формат файла YAML?
.yaml - это формат текстовых файлов, используемый для обмена данными между различными приложениями. YAML (сокращение от *YAML Ain't Markup Language*) - это стандарт организации информации в человекочитаемом, платформонезависимом формате с использованием пар key: value на основе отступов, закодированных в UTF-8. Для парсинга файлов .yaml требуется установка библиотеки YAML; популярные библиотеки включают PyYAML (Python), js-yaml (JavaScript) и SnakeYAML (Java). Файлы .yaml иногда сохраняются с расширением .yml, которое функционально идентично. Помимо обмена данными, файлы .yaml обычно используются для сериализации данных и написания конфигурационных файлов в таких инструментах, как Docker Compose, Kubernetes и GitHub Actions.
Сериализация
Сериализация - это термин, используемый в информатике. Сериализация - это процесс перевода данных или объектов в формат, который можно сохранить, передать и восстановить позже. Например, два учреждения, обменивающиеся данными в стандартизированном формате с использованием разных приложений, должны сериализовать эти данные перед отправкой. Сериализованные данные также могут храниться в файле - .yaml, .xml, .json, .toml и т. д. - и затем отправляться получателям.
Документ .yaml может опционально начинаться с маркера начала документа --- и заканчиваться ...; это также позволяет размещать несколько документов внутри одного файла. Начиная с YAML 1.2 (2009 г., пересмотрен в 2021 г.), каждый валидный файл JSON также является валидным YAML.
Безопасность и защита
РИСК: MEDIUMФайл YAML является обычным текстом и не исполняется сам по себе, поэтому его чтение безопасно. Два реальных риска: (1) конфигурационные YAML (конвейеры CI, Compose, K8s, Ansible) часто содержат секреты - токены, пароли, ключи - поэтому не вставляйте их в ненадежные онлайн-валидаторы и не фиксируйте их в публичных репозиториях. (2) Программная опасность: загрузка ненадежного YAML с помощью небезопасного парсера (например, yaml.load в PyYAML вместо yaml.safe_load) может привести к выполнению произвольных объектов/кода - всегда используйте безопасный загрузчик для файлов, которым вы не доверяете. Риск при редактировании: табуляция или смещенный пробел незаметно меняют смысл, поэтому делайте валидацию после редактирования.
Детали формата
в двух словахПрограммы, открывающие файлы YAML
Технические подробности
глубокая спецификация| Расширение файла | .yaml (также .yml) |
| MIME-тип | application/yaml |
| Кодировка | UTF-8 обычный текст; без бинарного заголовка или магических байтов |
| Структура | Пары «ключ: значение» на основе отступов; в отступах используются только пробелы - табуляция запрещена спецификацией |
| Маркеры документа | --- отмечает начало документа, ... отмечает конец документа; в одном файле могут сосуществовать несколько документов |
| Собственные типы данных | Строки, целые числа, числа с плавающей запятой, логические значения, null, последовательности (списки), сопоставления (словари), временные метки |
| Версия спецификации | YAML 1.2 (2009 г., пересмотрена в 2021 г.); заменяет YAML 1.1 (2005 г.) и YAML 1.0 (2001 г.) |
| Совместимость с JSON | Начиная с YAML 1.2, каждый валидный документ JSON также является валидным YAML - JSON является строгим подмножеством |
| Комментарии | Однострочные комментарии начинаются с # ; могут располагаться на отдельной строке или внутри строки после значения |
| Многострочные строки | Литеральный блочный скаляр (|) сохраняет переносы строк; сложенный скаляр (>) преобразует переносы строк в пробелы |
| Якоря и псевдонимы | & определяет именованный якорь, а * ссылается на него (псевдоним), позволяя повторно использовать значения без дублирования |
| Разработчики | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Общие случаи использования | Конфигурационные файлы (Kubernetes, Docker Compose, GitHub Actions, Ansible), сериализация данных, определения OpenAPI |
| Кавычки | Поддерживаются строки без кавычек, в одинарных ('...') и двойных кавычках ("..."); двойные кавычки позволяют использовать escape-последовательности |
| Выпущен | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Открыть стандартное | Да · без роялти |
| Спецификация | yaml.org |