Бинарные форматы обмена данными
JSON и YAML удобны людям и отладке. В высоконагруженных каналах (микросервисы, мобильные клиенты, очереди) часто выбирают бинарные форматы: меньше байт, быстрее парсинг, явная схема.
Текстовые форматы: JSON, YAML. Использование в API: интеграции.
Сравнение
| Формат | Схема | Читаемость | Размер | Типичное применение |
|---|---|---|---|---|
| JSON | Нет (опционально JSON Schema) | Высокая | Базовый | Публичные REST API |
| MessagePack | Нет | Низкая | Меньше JSON | Кэш, внутренние очереди |
| BSON | Нет | Низкая | Компактнее JSON | MongoDB на диске |
| Protocol Buffers | .proto, строгая | Низкая | Очень компактно | gRPC, внутренние контракты |
| CBOR | Опционально | Низкая | Компактно | IoT, COSE/JWT-подобные сценарии |
MessagePack
«Бинарный JSON»: те же типы (map, array, int, str), но без повторения имён полей в каждом сообщении.
Когда: внутренний кэш (Redis), сериализация сессии, когда обе стороны на одном стеке и не нужна эволюция схемы годами.
Осторожно: без схемы легко сломать совместимость при смене типа поля.
BSON
Расширение JSON с типами даты, ObjectId, бинарными полями. Нативен для MongoDB.
Когда: документная БД, вложенные структуры, GridFS.
Не обязан быть форматом API наружу — наружу часто всё равно JSON.
Protocol Buffers (Protobuf)
Схема в .proto → кодогенерация классов → бинарный wire-format.
Плюсы:
- компактность и скорость;
- явная версионность полей (
optional, reserved); - основа gRPC.
Минусы:
- нужен пайплайн codegen;
- неудобно читать в DevTools без декодера.
Когда: service-to-service, стриминг, жёсткий контракт между командами.
Минимальный .proto и идея wire-format:
syntax = "proto3";
message Order {
string order_id = 1;
double amount = 2;
string currency = 3;
}
Поле = 1 — номер в бинарном потоке (не порядок в тексте). При эволюции API старые поля помечают reserved, новые добавляют с новыми номерами.
CBOR (Concise Binary Object Representation)
CBOR (RFC 8949) — бинарный формат, близкий по модели данных к JSON: map, array, текст, числа, байты, логические значения. Часто используют там, где нужна компактность, но не хочется схему Protobuf: IoT, встраиваемые устройства, некоторые криптографические обёртки (рядом с COSE).
| Аспект | CBOR | MessagePack | Protobuf |
|---|---|---|---|
| Схема | Опционально (CDDL) | Нет | Обязательна .proto |
| Самоописание | Теги типов в потоке | Аналогично | Только по .proto |
| Типичный размер | Меньше JSON | Сопоставимо | Обычно меньше всех |
Тот же смысл, что JSON {"theme":"dark","port":8080}, в CBOR кодируется короче за счёт бинарных ключей и чисел; в hex-дампе файл нечитаем без декодера — как у Protobuf.
Когда выбирать CBOR: ограниченный канал, парсер на устройстве, контракт «как JSON», но без текстового тела. Когда не нужен: публичный REST для браузера — остаётся JSON.
Выбор для архитектора
Правила:
- Публичный API — JSON (или JSON + опциональный binary content-type).
- Не десериализуйте бинарь из ненадёжного источника без валидации длины и схемы.
- Версионируйте контракт (semver API, поля
v2в Protobuf). - Логи и трассировка — оставляйте текст (JSON-логи), не Protobuf.
Безопасность
Бинарные форматы не «безопаснее» JSON. Уязвимости в парсерах и неограниченная вложенность возможны везде. Ограничивайте размер тела запроса на reverse proxy.
Связанные темы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Форматы хранения настроек и данных. Организация данных в текстовых файлах. Текстовые форматы данных - представление информации в виде последовательностей символов для обмена и человекочитаемой обработки. Не путать с цифрами в окружении — ① (U+2460) — это circled digit one, не эмодзи (Emoji=No). Шрифт как цифровая реализация гарнитуры - контуры символов, метрики и отличие от понятия «начертание». Универсальный язык разметки — синтаксис, пространства имён, валидация XSD, CSS и связь с XPath, XSLT и DOM. Примечание — xN означает шестнадцатеричное представление Unicode-кода символа. XSLT-таблица — это XML-документ (обычно с пространством имён http — //www.w3.org/1999/XSL/Transform, сокращённо xsl — ). Корневой элемент — или (синонимы). Язык путей XML — узлы, оси, предикаты, операторы и практические запросы к дереву документа. Преобразование XML — таблицы стилей, шаблоны xsl:*, сортировка, ветвление, клиент и сервер. Модель документа XML — типы узлов, коллекции, обход дерева и навигация в API. JSON как текстовый формат обмена данными между системами, основанный на объектах и массивах с явной структурой. Ключи и значения разделяются двоеточием ( — ), за которым следует пробел.Конфигурационные данные в текстовых форматах
Текстовые форматы представления данных
Справочник по эмодзи
Шрифты
XML
Справочник по XML
Справочник по XSLT
XPath
XSLT
XML DOM
JSON
YAML