← Ко всем open source проектам

Protocol Buffers

protocolbuffers/protobuf

Protocol Buffers — формат сериализации данных и компилятор protoc для строгих схем обмена между сервисами.

Форки 16,151
Автор protocolbuffers
Язык C++
Лицензия NOASSERTION
Обновлено 2026-06-11

Что это такое

Protocol Buffers — формат сериализации данных от Google. Он помогает описывать сообщения строгой схемой, генерировать код для разных языков и передавать данные между сервисами компактно и предсказуемо.

Репозиторий protocolbuffers/protobuf содержит компилятор protoc, библиотеки времени выполнения и поддержку нескольких языков. Проект существует на GitHub с 2014 года.

Что внутри

Внутри — исходники компилятора, библиотеки времени выполнения, документация, инструкции по сборке через Bazel и материалы по версиям. Главная идея: схема `.proto` становится контрактом между системами.

Пример .proto-схемы

Фрагмент показывает контракт сообщения: поля имеют номера и типы, поэтому разные сервисы могут обмениваться данными без ручного парсинга JSON.

Язык: Plain text
syntax = "proto3";

message User {
  int64 id = 1;
  string name = 2;
  repeated string roles = 3;
}

Где он полезен

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

Protobuf особенно полезен там, где один и тот же контракт нужен разным языкам. Схема описывается один раз, после чего генератор создает типы для клиента и сервера. Это снижает риск, что одна команда отправит поле в одном формате, а другая будет ждать его иначе.

В отличие от свободного JSON, Protobuf заставляет думать о совместимости: у полей есть номера, типы и правила эволюции. Нельзя просто удалить поле или переиспользовать номер без последствий. Зато при аккуратной дисциплине схема переживает годы изменений.

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

Детали проекта

Protocol Buffers решает очень практичную проблему: разные сервисы должны одинаково понимать данные. Если контракт живет только в документации или в примерах JSON, он быстро расходится с реальностью. `.proto`-схема делает контракт исполняемым артефактом.

Компилятор protoc превращает схему в код для разных языков. Это особенно полезно в распределенных системах: сервер может быть написан на Go, клиент на Java, фоновые задачи на Python, а структура сообщения остается общей.

Номера полей — важная часть модели. Они позволяют формату оставаться компактным и поддерживать совместимость, но требуют аккуратности. Удаленное поле нельзя бездумно занять заново, иначе старые и новые клиенты начнут понимать сообщение по-разному.

Protobuf часто выбирают вместе с gRPC, но формат полезен и отдельно: для файлов, очередей, логов, обмена между сервисами и мобильных клиентов. Его ценность растет там, где нужно много раз передавать одинаковые структуры данных и контролировать версию контракта.

Ограничение — дополнительный слой в разработке. Команде нужно хранить схемы, генерировать код, следить за совместимостью и обучить людей правилам эволюции. Для маленького внутреннего JSON-эндпоинта это может быть избыточно, но для долгоживущих контрактов часто окупается.

Сильные стороны и ограничения

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