Форматы данных

Тема дорожной карты · Backend разработчик

Форматы сериализации данных — это стандартизированные кодировки, используемые для преобразования структур данных в памяти в передаваемую или хранимую последовательность байт и обратно; это ключевая задача любой бэкенд-системы, взаимодействующей по сети или сохраняющей данные. Текстовые форматы: JSON (де-факто стандарт для REST API, разбирается через JSON.parse() / json.loads()), XML (применяется в SOAP-сервисах и документо-ориентированных рабочих процессах, разбирается с DOMParser или lxml) и YAML (удобочитаемые файлы конфигурации для Docker Compose, Kubernetes-манифестов и CI/CD-пайплайнов) — обменивают компактность на читаемость для человека. Бинарные форматы обеспечивают превосходную производительность: Protocol Buffers (Protobuf) кодирует типизированные сообщения, описанные в .proto-файлах, с размером в 3–10 раз меньше и скоростью разбора выше, чем у JSON, обеспечивая работу gRPC-микросервисов; MessagePack сериализует JSON-подобные структуры в бинарном виде через msgpack.packb() / msgpack.unpackb() для компактных сетевых полезных нагрузок; Apache Avro предоставляет поддержку эволюции схемы, критически важной для потоковой передачи событий в Kafka. Выбор формата сериализации данных зависит от сценария: JSON — для REST API и совместимости с браузером, Protobuf или gRPC — для высокопроизводительных внутренних микросервисов, MessagePack — для мобильных клиентов с ограниченной полосой пропускания, Avro или Parquet — для конвейеров больших данных. Бэкенд-разработчики должны понимать инструменты валидации схем (ajv для JSON Schema, protoc для Protobuf) и стратегии версионирования, позволяющие форматам сериализации данных развиваться без нарушения совместимости с существующими потребителями.

Как это работает

Форматы данных — что вы шлёте по сети и как кодируете: JSON (текст, читаем, повсеместный), Protobuf (бинарь, требует схему, дефолт gRPC), MessagePack (бинарь, JSON-like, меньше), CBOR (бинарь, IoT-friendly), XML (legacy, многословный), Avro (schema-evolving, big-data экосистема). Для конфига: YAML (удобно писать, хрупкие отступы), TOML (яснее YAML), JSON (точно, но уродливо для человека). Формат времени: ISO 8601 / RFC 3339 с явной таймзоной.

Когда применять

JSON — для публичных REST API: клиенты на любом языке его читают. Protobuf — для high-traffic internal RPC (меньше, быстрее, schema-versioned). Avro — для аналитических пайплайнов (Kafka + schema registry). Всегда указывайте кодировку (Content-Type: application/json; charset=utf-8). Datetime — UTC + ISO 8601, локаль клиент сам выставит. Никогда locale-зависимые числовые форматы (1,000 vs 1.000).

Типичные ошибки

Ловушки Форматы данных: тихо храните локальное время без таймзоны (DST-баги, off-by-N-часов навсегда); JSON без схемы — клиенты гадают, какие поля есть (OpenAPI / JSON Schema чинит); float для денег (используйте копейки как integer или decimal-тип); BOM-prefixed UTF-8 ломает парсеры; вера в порядок ключей JSON (нет гарантии).

Связанные понятия

Полезные ресурсы