Protobuf
Тема дорожной карты · Backend разработчик
Protocol Buffers (Protobuf) — разработанный Google независимый от языка и платформы бинарный формат сериализации, кодирующий строго типизированные структурированные данные, описанные в .proto-схемах, с полезными нагрузками в 3–10 раз меньше и скоростью разбора в 5–100 раз выше, чем у эквивалентного JSON. Компилятор protoc генерирует типобезопасный код из .proto-определений на Go, Java, Python, TypeScript, Rust и ещё десятке языков — гарантируя, что клиент и сервер согласованы в точной форме сообщений, и что добавление новых необязательных полей обратно совместимо со старыми потребителями. Protobuf лежит в основе gRPC: интерфейсы сервисов описываются в .proto-файлах с объявлениями rpc, а сгенерированные заглушки автоматически берут на себя сериализацию, HTTP/2-фреймирование и распространение дедлайнов — делая gRPC + Protobuf стандартным выбором для высокопроизводительной коммуникации между микросервисами в Kubernetes-кластерах. Protocol Buffers также используются как формат схемы событий для топиков Apache Kafka в событийно-ориентированных архитектурах, часто управляемый через Schema Registry (Confluent Schema Registry), обеспечивающий соблюдение правил совместимости (BACKWARD, FORWARD, FULL) и предотвращающий попадание критических изменений схемы в продакшен. По сравнению с JSON, Protocol Buffers требуют совместного использования .proto-файла между производителем и потребителем, добавляя шаг управления схемой; однако выигрыш — детерминированная сериализация, типовая безопасность на этапе компиляции и значительно меньшие затраты CPU и полосы пропускания при масштабировании.
Как это работает
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).
Типичные ошибки
Ловушки Protobuf: тихо храните локальное время без таймзоны (DST-баги, off-by-N-часов навсегда); JSON без схемы — клиенты гадают, какие поля есть (OpenAPI / JSON Schema чинит); float для денег (используйте копейки как integer или decimal-тип); BOM-prefixed UTF-8 ломает парсеры; вера в порядок ключей JSON (нет гарантии).