Найти в Дзене
IT-Volchkov

JSON vs YAML или почему JSON чаще используют для интеграций

JSON vs YAML или почему JSON чаще используют для интеграций? 🤔 Вчера сидел вечером и думал: А почему мы практически при каждой популярной интеграции используем JSON? Ведь есть другие, более читабельные и простые форматы с точки зрения визуала. И при этом более легковесные. Например, YAML, очень похож на JSON, но без лишних кавычек. Имеет четкую структуру, поддерживает вложенность, так почему не он? 🤔 Предлагаю провести сравнение и понять, почему же все-таки выбирают JSON? 📊 0️⃣ Скорость обработки JSON парсится быстрее YAML, особенно в JavaScript или Python, потому что его синтаксис проще. Как так? Визуально сложнее, но с точки зрения обработки - точно проще, так как у него есть кавычки, которые помогают считывать структуру, а чтобы спарсить YAML надо парсить пробелы, как Python + в YAML есть мультистроковые значения и специальные тэги типа !!timestamp, которые также усложняют обработку. Например, ➡️ YAML # YAML user:   id: 1   name: "Alex" ➡️ JSON { "user": { "id": 1, "name"

JSON vs YAML или почему JSON чаще используют для интеграций? 🤔

Вчера сидел вечером и думал: А почему мы практически при каждой популярной интеграции используем JSON? Ведь есть другие, более читабельные и простые форматы с точки зрения визуала. И при этом более легковесные. Например, YAML, очень похож на JSON, но без лишних кавычек. Имеет четкую структуру, поддерживает вложенность, так почему не он? 🤔

Предлагаю провести сравнение и понять, почему же все-таки выбирают JSON? 📊

0️⃣ Скорость обработки

JSON парсится быстрее YAML, особенно в JavaScript или Python, потому что его синтаксис проще. Как так? Визуально сложнее, но с точки зрения обработки - точно проще, так как у него есть кавычки, которые помогают считывать структуру, а чтобы спарсить YAML надо парсить пробелы, как Python + в YAML есть мультистроковые значения и специальные тэги типа !!timestamp, которые также усложняют обработку.

Например,

➡️ YAML

# YAML

user:

  id: 1

  name: "Alex"

➡️ JSON

{ "user": { "id": 1, "name": "Alex" } }

1️⃣ Стандартизация и поддержка из коробки

JSON — часть стандартной библиотеки всех популярных языков, например, JavaScript, Python, Java, C#., а YAML требует внешних библиотек, например, PyYAML в Python. И для API - это критично, потому что клиент может быть написан на любом языке и настройка библиотек добавляет лишнего геморроя + JSON работает «из коробки» даже в браузере.

2️⃣ Безопасность

То, что сейчас не просто на слуху. Оказалось, что YAML уязвим к инъекциям при десериализации.

Например, мы можем выполним произвольный код через !!python/object/apply:os.system ["rm -rf /"]

JSON безопаснее — поддерживает только данные. Исполнение кода там не сделать.

3️⃣ Компактность для передачи

Ну смысле!? Тут же кавычки!!! 😨 Но кроме них, в JSON - отсутствуют комментарии, которые с одной стороны повышают читабельность, а с другой API не особо нужны + отступы в YAML занимают больше места в строковом виде.

Например,

➡️ YAML

# YAML

- 1

- 2

- 3

json

[1, 2, 3]

4️⃣ Совместимость с инструментами

Большинство API-инструментов, например, Postman, Swagger, используют JSON, как основной формат. Базы данных, например, MongoDB, PostgreSQL с JSONB, оптимизированы под JSON.

Получается 5:0 в пользу JSON.

Поэтому, если вы думаете, какой формат данных использовать в вашем API, то в 99% - у вас будет JSON. Это стандарт, особенно для REST или GraphQL.