Буферы протоколов для обмена данными за пределами JSON
Protocol Buffers - язык определения данных, созданный Google, который можно сравнить с IDL, но который намного проще. Его синтаксис, основанный на синтаксисе языка C, относится к синтаксису JSON с отличием от использования типичных переменных.
Google определила этот язык для использования на собственных серверах, которые хранят и обмениваются объемами структурированных данных, а в 2008 году решила перевести его в открытый источник. Он используется в Android для ускорения обмена с сервером (например, в Marketplace).
Файлы протос имеют двойной формат, читаемый человеком источник и бинарный файл, который может быстро обрабатываться машиной.
Его можно использовать по трем причинам :
- Это гораздо более компактная альтернатива XML с значительно сокращенным временем обработки.
- Он предоставляет способ хранения и обмена структурированными данными между программным обеспечением, возможно, написанным на разных языках программирования, а также между сервером и клиентом.
Библиотека функций включена, чтобы помочь использовать ее в веб-службах. - Он позволяет сериализовать классы, не зависящие от языка. Serialisaton создает компактный и быстрый двоичный код для обработки.
Простой формат с расширенными инструментами
Во-первых, некоторые определения для уточнения:
Protocol Buffers - имя языка и имя единиц данных, инкапсулированных в файлы protos.
Proto: файл определения данных на языке PB и расширение .proto.
Protoc - имя компилятора, генерирующего классы или бинарный файл .
Особенности языка
- Язык, ориентированный на объект, каждое сообщение наследует класс Message.
- Типичный язык данных.
- Текстовые и бинарные форматы.
- Компилятор Protoc генерирует на основе определения данных класс на нужном языке.
- Protoc предоставляет классы C++ или Java и предназначен для совместимости со всеми языками.
- Класс сериализуется в двоичном файле. Проток также может создавать двоичный файл непосредственно из языка PB.
- Единица называется «сообщение». Файл .proto может содержать несколько сообщений.
- Поддерживает пространства имен .
- Структура сообщения рекурсивна, прото-структура может иметь элементы других протосных структур.
- Повторяющееся поле, как и в XML, может использоваться повторно в одном и том же сообщении.
- Динамически расширяемый.
Синтаксис
Каждый источник имеет форму:
message nom { ...liste de champs de données... }
Основные типы скалярных данных - string, int32, int64, float, double, bool.
Переменные могут быть объявлены вместе с требуемым, опционным, повторяющимся модификатором.
Им присваивается порядковый номер, который является директивой компилятора, а не значением переменной.
required string x = 1 // ce n'est pas la valeur 1
Стартовое значение присваивается директиве по умолчанию:
required string x = 1 [default="Un texte"];
К примитивам добавляются вложенные типы, определенные путем включения сообщения в другое сообщение:
message contenant { required int32 numero = 1; message contenu { repeated string x = 1; } }
К объекту «content» и его переменным можно получить доступ по строке: contant.contenu.x
В сообщения можно включать перечисления с типом перечисления.
При определении структуры сообщения оно используется в программе путем создания экземпляра. И мы связываем методы, специфические для сообщения и созданные составителем источника proto.
contenant moninstance; moninstance.set_numero(18);
Пример кода
Показать сообщение.
message hello { required string = 1 [default="le message"]; optional int32 = 2; }
Подробнее о формате в определении языка PB.
Загрузите компилятор Protoc с полной документацией.
См. также...
- Учебник по протоколу «Буферы». Первое использование .
- JSON. Более простой формат для JavaScript и серверных языков.
- FlatBuffers. Также Google, очень быстрый фреймворк сериализации, позволяющий использовать хранимые данные без загрузки файла в память. Пример использования, данные, используемые игрой в качестве карт, спрайтов и т.д.