Баннер мобильный (3) Пройти тест

YAML

Глоссарий

24 августа 2023

Поделиться

Скопировано

Содержание

    YAML — это специальный язык для структурированной записи информации, обладающий простым синтаксисом. Этот инструмент позволяет сохранять сложно организованные данные в формате (файл с расширением .yml), который компактен и легко читаем. Эта возможность может оказаться чрезвычайно полезной в контексте DevOps и виртуализации.

    Что такое YAML?

    Логотип YAML
    Логотип формата YAML. Источник

    YAML – это язык, спроектированный для хранения информации в доступном для понимания человеком формате. Его название расшифровывается как «Ещё один язык разметки». Впрочем, позже это определение было изменено на «YAML не является языком разметки», чтобы четко отделить его от принадлежащих к этой категории языков.

    Данный язык подобен XML и JSON, однако использует более утонченный синтаксис, сохраняя при этом аналогичные возможности. YAML обычно применяется для формирования конфигурационных файлов в рамках подхода «Инфраструктура как код» (IaC), а также для управления контейнерами в контексте DevOps.

    Чаще всего с применением YAML создаются протоколы автоматизации, которые способны выполнить последовательности команд, зафиксированных в файле с расширением .yml. Это предоставляет вашей системе возможность функционировать более быстро и независимо, без дополнительной вовлеченности со стороны разработчика.

    Постоянно растущее количество компаний активно применяет методики DevOps и виртуализацию в своей деятельности. Именно по этой причине владение YAML становится неотъемлемой необходимостью для современного разработчика. Особенно ценно то, что интеграция языка существенно облегчается благодаря его совместимости с Python (включая использование библиотеки PyYAML), а также с популярными технологиями вроде Docker и Ansible.

    Сравнение YAML, JSON и XML

    YAML (.yml)

    Особенности:

    • Обладает человекопонимаемым кодом;
    • Имеет минималистичный синтаксис;
    • Ориентирован на работу с данными;
    • Включает в себя структуру, напоминающую JSON (YAML находится в расширенной версии JSON);
    • Позволяет добавлять комментарии;
    • Поддерживает использование строк без кавычек;
    • Считается более «чистым» в сравнении с JSON;
    • Предоставляет дополнительные возможности, такие как расширяемые типы данных, относительные якоря и сохранение порядка ключей.

    Применение: YAML оптимально подходит для приложений с обширным объемом данных, которые основаны на DevOps-процессах или используют виртуальные машины. Повышенная читаемость данных оказывается особенно полезной в командах, где разработчики регулярно взаимодействуют с этими данными.

    JSON

    Особенности:

    • Требует больше усилий для чтения;
    • Синтаксис имеет жесткие и четкие требования;
    • Подобен встроенному стилю YAML (некоторые парсеры YAML могут интерпретировать JSON-файлы);
    • Отсутствует возможность добавления комментариев;
    • Строки должны быть обрамлены двойными кавычками.

    Применение: JSON применяется в веб-разработке, представляя наилучший формат для сериализации и передачи данных через HTTP-соединение.

    XML

    Особенности:

    • Требует больше усилий для чтения;
    • Обладает более сложной структурой;
    • Выполняет функцию языка разметки, в то время как YAML используется для форматирования данных;
    • Предоставляет больший спектр возможностей, например, использование атрибутов тегов;
    • Обладает более жёсткой схемой документа.

    Применение: XML идеально подходит для сложных проектов, требующих тщательного контроля над валидацией, схемой и пространством имен. XML имеет низкую читаемость, потребляет больше пропускной способности и требует больше места для хранения данных, но при этом предоставляет непревзойдённый уровень контроля.

    Уникальные черты

    Поддержка множественных документов

    Вы имеете возможность сгруппировать несколько YAML-документов в одном файле, что значительно облегчает управление файлами и обработку информации.

    Документы разделяются тройным дефисом (-):

    ---
    shop: shopOne
    shop: open (20)
    ---
    shop: shopTwo
    action: open (18)
    ---

    Возможность добавления комментариев

    YAML допускает вставку комментариев после символа #, аналогично тому, как это применяется в языке Python:

    # Это однострочный комментарий
    фрукты:
      - название: яблоко
        цвет: красный
        количество: 10  # А это пример
    # многострочного комментария

    Понятный синтаксис

    В синтаксисе YAML-файлов используется система отступов, схожая с той, что используется в языке программирования Python. Важно использовать пробелы вместо табуляции, чтобы избежать недоразумений.

    Такой подход устраняет избыточное использование символов, которые характерны для JSON и XML (такие как кавычки, скобки и фигурные скобки). Как результат, файл становится намного более читаемым.

    YAML:

     Imaro:
     author: Charles R. Saunders
     language: English
     publication-year: 1981
     pages: 224

    JSON:

    {
       "Imaro": {
          "author": "Charles R. Saunders",
          "language": "English",
          "publication-year": "1981",
          "pages": 224
       }
    }

    Явная и неявная типизация

    В YAML реализована как явная, так и неявная типизация данных. Он предоставляет возможность как автоматически определить типы, так и явно указать их. Чтобы использовать конкретный тип данных, достаточно добавить !![тип] перед значением.

    date: !!timestamp 2023-08-22  # Используется тег !!timestamp для явной типизации даты

    Примеры неявной типизации:

    person:
      name: John  # Значение "John" может быть интерпретировано как строка
      age: 30    # Значение "30" может быть интерпретировано как целое число
      is_student: true  # Значение "true" может быть интерпретировано как булево значение

    Отсутствие встроенных исполняемых файлов 

    В языке отсутствуют встроенные исполняемые файлы. Это обеспечивает безопасность в обмене YAML-файлами с другими сторонами.

    Для работы с исполняемыми файлами, вам потребуется интеграция YAML с другими языками, такими как Perl или Java.

    Синтаксис YAML

    Язык YAML обладает рядом фундаментальных концепций, которые обеспечивают обработку разнообразных данных.

    Пары «ключ-значение»

    Основная часть данных в файле yml представлена в форме пар «ключ-значение», где ключ представляет имя, а значение — соответствующие данные.

    Скаляры и маппинг

    Скаляр обозначает отдельное значение, связанное с определенным именем.

    В языке YAML поддерживаются стандартные типы: int и float, boolean, string и null.

    Эти типы могут быть представлены в разных форматах, включая шестнадцатеричный, восьмеричный и экспоненциальный. Дополнительно, имеются специальные типы для математических концепций, таких как бесконечность, минус бесконечность и NaN.

    # Примеры различных скалярных типов данных в YAML
    # Целое число (int) в десятичном формате
    age: 25
    
    # Число с плавающей точкой (float)
    temperature: 25.5
    
    # Булево значение (boolean)
    is_student: true
    
    # Строка (string)
    name: "John Doe"
    
    # Значение null
    address: null
    
    # Шестнадцатеричное число
    hex_value: 0xA1F
    
    # Восьмеричное число
    octal_value: 0754
    
    # Экспоненциальное число
    scientific_notation: 1.23e+4
    
    # Бесконечность
    positive_infinity: .inf
    
    # Минус бесконечность
    negative_infinity: -.inf
    
    # Не числовое значение (NaN)
    not_a_number: .nan

    Строки

    Строка представляет собой последовательность символов, которая может включать слова или целые предложения. Для обозначения строк используются символы | для отдельных строк и > для параграфов.

    Важно отметить, что в YAML кавычки не требуются.

    # Пример строки с использованием символа | для отдельной строки
    
    single_line_text: |
      Это строка, которая может содержать одно или несколько предложений.
      Она будет охватывать несколько строк, но форматирование сохранится.
    
    # Пример строки с использованием символа > для параграфа
    paragraph_text: >
      Это также строка, которая может включать одно или несколько предложений.
      Однако она будет обработана как один абзац, и переносы строк будут удалены.
    
    # Строки без использования кавычек
    unquoted_text: Пример строки без использования кавычек.

    Последовательности

    Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].

    # Многострочная последовательность
    fruits_multiline:
      - apple
      - banana
      - orange

    Однострочные последовательности выглядят более компактно, но их читаемость страдает:

    # Однострочная последовательность
    fruits_oneline: [apple, banana, orange, grape, pineapple]

    Словари

    Словари представляют собой собрания пар «ключ-значение», которые группируются под одним ключом. Они позволяют структурировать данные по логическим категориям.

    # Пример использования словаря для описания персоны
    person1:
      name: John Doe
      age: 30
      is_student: false
      contact:
        email: john@example.com
        phone: "+1234567890"
    person2:
      name: Bob Smith
      age: 22
      is_student: true 
      contact:
        email: bob@example.com
        phone: "+9876543210"

    Якоря (Anchors)

    Якоря (anchors) являются одной из уникальных возможностей языка YAML, которая позволяет создавать ссылки на определенные элементы данных внутри структуры документа. Это особенно полезно в случаях, когда одни и те же данные повторяются в разных местах документа, так как якоря позволяют избегать дублирования информации.

    Принцип работы якорей довольно прост: вы определяете элемент данных с использованием якоря, и затем вы можете ссылаться на этот якорь в других частях документа. Это позволяет сохранить данные в одном месте и ссылаться на них по мере необходимости.

    Пример использования якорей:

    person: &details
      name: John Doe
      age: 30
      city: Exampleville
    
    # Использование якоря для создания двух разных записей с одинаковыми данными
    employee1:
      <<: *details
      position: Developer
    
    employee2:
      <<: *details
      position: Designer

    В этом примере, якорь &details создает анкер, содержащий общие данные для персоны. Затем с помощью ссылки <<: *details в разделах employee1 и employee2 подключаются данные, определенные в якоре. Это позволяет избежать дублирования и упрощает обновление данных, так как изменения в одном месте автоматически отражаются в других местах.

    Шаблоны (Templates)

    В языке YAML понятие «шаблоны» (templates) находит свое применение в контексте структурирования и повторного использования данных. Шаблоны представляют собой заранее определенные структуры данных, которые можно многократно применять в различных контекстах. Это особенно полезно при создании конфигураций, описании систем и организации данных.

    Пример использования шаблонов:

    # Шаблон для описания сервера
    server_template: &server
      name: Example Server
      cpu: 4 cores
      memory: 8 GB
    
    # Конфигурация для двух серверов на основе шаблона
    server1:
      <<: *server
      ip: 192.168.1.101
    server2:
      <<: *server
      ip: 192.168.1.102

    Интеграция с Docker, Ansible и другими инструментами

    Язык YAML активно используется для интеграции с различными инструментами автоматизации, развертывания и управления, такими как Docker, Ansible и многими другими. Эта интеграция обеспечивает более эффективное управление конфигурациями, развертыванием и автоматизацией задач.

    Интеграция с Docker:

    Docker использует файлы YAML для определения конфигураций контейнеров. Файл docker-compose.yml — это пример использования языка для определения многоконтейнерных приложений, включая контейнеры, сети и объемы.

    Пример определения сервиса в Docker Compose:

    version: '3'
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
      db:
        image: postgres:latest
        environment:
          POSTGRES_PASSWORD: example_password

    Интеграция с Ansible:

    Ansible использует файлы YAML для определения конфигураций инфраструктуры и автоматизации задач. Файлы .yml в Ansible содержат «playbooks» — наборы задач, которые описывают, что и как должно быть сделано на целевых системах.

    Пример Ansible playbook:

    - name: Установка и настройка веб-сервера
      hosts: webservers
      tasks:
        - name: Установка Nginx
          apt:
            name: nginx
            state: present

    Расширенные формы последовательностей и маппинга

    В языке YAML существуют расширенные формы описания последовательностей (списков) и маппинга (словарей), которые добавляют дополнительные возможности и гибкость при структурировании данных.

    Формы последовательностей:

    1. Многострочные строки внутри последовательности:
    fruits:
      - apple
      - |
        This is a long description
        for a banana.
      - orange

    В данном примере, второй элемент «banana» представлен многострочной строкой, что позволяет включать более длинные и описательные данные.

    1. Вложенные последовательности:
    menu:
      - dish: pasta
        ingredients:
          - tomatoes
          - cheese
      - dish: salad
        ingredients:
          - lettuce
          - cucumber

    Формы маппинга:

    1. Блочный стиль маппинга:
    person:
      name: John Doe
      age: 30
      contact:
        email: john@example.com
        phone: "+1234567890"
    1. Вложенные маппинги:
    company:
      name: Example Corp
      address:
        street: 123 Main St
        city: Exampleville
    
    Сложные ключи:
    "complex key":
      value: some value

    Расширенные типы данных (timestamp, null и другие)

    В языке YAML поддерживаются расширенные типы данных, помимо стандартных типов (строка, число, булево значение и т.д.). Эти расширенные типы данных позволяют более точно и компактно описывать разнообразные сущности.

    Примеры расширенных типов данных в YAML:

    • Timestamp (Временные метки):
    timestamp_example: 2023-08-22T15:30:00Z

    Здесь timestamp_example представляет собой временную метку в формате ISO 8601.

    • Null (Пустое значение):
    nullable_value: null

    Этот пример демонстрирует использование значения null, которое может обозначать отсутствие значения.

    • NaN (Not a Number):
    nan_example: .nan

    Значение .nan представляет «не число», что может использоваться для обозначения неопределенных числовых значений.

    • Infinity (Бесконечность):
    infinity_example: .inf

    Значение .inf представляет положительную бесконечность.

    • Отрицательная бесконечность:
    negative_infinity_example: -.inf

    Значение -.inf представляет отрицательную бесконечность.

    Другие термины на «Y»

    Все термины

    Поделиться

    Скопировано

    0 комментариев

    Комментарии