Protobuf

Sérialisateur de messages (C++, Java, Node.js, ...)


 * https://developers.google.com/protocol-buffers/
 * https://github.com/google/protobuf

Alternative : BSON, Avro, Thrift, Cap’n Proto, Msgpack

http://fr.slideshare.net/IgorAnishchenko/pb-vs-thrift-vs-avro

=API=

ProtoBuf ou Protocol Buffers est un sérialisateur de structures de données. Il implique dans un premier temps, l'utilisation d'une "Interface de Description de Message" qui décrit la structure de données à sérialiser. Il implique dans un second temps, l'utilisation d'un programme (compilateur) générant le code source à partir de ces description. Ce code source est utilisé pour créer et parser des flux de données au format décrit par les messages. Exemple de description de Message : message Luminosité { required int intensité = 50;        // La propiété "intensité" est obligatoire. optional string type = "naturelle"; // La propiété "type" est optionnelle. }

message Humidité { required double taux = 60.0;        // La propiété "taux" est obligatoire. optional string lieu = "sol";       // La propiété "lieu" est optionnelle. }

La conception de Protobuf par Google s'est axée sur un usage interne. Cependant plusieurs compilateurs pour différents langages (C++, C#, Python, Java, Ruby, NodeJS, etc.) ont été développé et mis à disposition sous licence gratuite. Voici quelques exemples d'usages pour les langages Node.js, Python et Java.

Installation
Rien de plus simple pour l'installer: npm install protocol-buffers

Utilisation
Soit un fichier test.proto message Luminosité { required int intensité = 50;        // La propiété "intensité" est obligatoire. optional string type = "solaire";   // La propiété "type" est optionnelle. } Encodage : var protobuf = require('protocol-buffers')

var messages = protobuf(fs.readFileSync('test.proto'))

var buf = messages.Test.encode({ intensité: 42,  type: 'néon' }) Décodage : var obj = messages.Test.decode(buf) console.log(obj) // devrait afficher un objet similaire à celui du dessus Voici quelques liens utiles pour d'autres exemples https://github.com/mafintosh/protocol-buffers https://www.npmjs.org/package/node-protobuf

Installation
Un guide d'installation détaillé se trouve ici.

Utilisation
Avec Python, il s'agit dans un premier temps de compiler les buffers (ProtoBuf) à partir des messages.proto prédéfinis: protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/messages.proto Il suffit ensuite d'utiliser :
 * SerializeToString: pour sérialiser le message et retourner un type String.
 * ParseFromString(data): pour parser le message à partir d'un type String.

Des exemples détailler se trouvent iciici.

Utilisation
L'utilisation est à peu près similaire : on commence par compiler protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/messages.proto Ceci génère un fichier MessageProto.java qui fourni tous les outils nécessaires aux encodage et décodage.

Des exemples détailler se trouvent iciici.

Avec Maven : http://stackoverflow.com/questions/1578456/integrate-protocol-buffers-into-maven2-build

=Conversion=

Il existe plusieurs méthode et outils de conversion des 'JSON en ProtoBuf'' et vis-versa.

Une méthode de conversion consiste à utiliser protobuf-java-format. Voici Un exemple de conversion de ProtoBuf vers JSON : JsonFormat.printToString(protoMessage) D'autres exemples ont disponibles ici