Qu'est-ce que Protocol Buffers (protobuf) et pourquoi l'utiliser ?
Protocol Buffers (protobuf) est un mécanisme puissant, efficace et extensible de sérialisation de données structurées, développé par Google. Il permet de définir une fois la structure des données dans un fichier spécial (.proto), puis de générer du code source dans différents langages de programmation (C++, Java, Python, Go, etc.) pour lire et écrire ces données.
Pourquoi utiliser protobuf ?
- Efficacité : Protobuf sérialise les données au format binaire, bien plus compact et rapide à traiter que les formats textuels comme XML ou JSON. C'est crucial pour les systèmes à forte charge et l'architecture microservices.
- Vitesse : La sérialisation et la désérialisation sont nettement plus rapides qu'avec les formats textuels traditionnels.
- Sécurité de typage : Le code généré assure un typage strict, réduisant les erreurs à l'exécution.
- Multiplateforme et multilangue : Définissez votre schéma de données une fois et utilisez-le dans des projets C++, Python, Java et autres.
- Rétrocompatibilité : Protobuf permet de faire évoluer le schéma : ajoutez de nouveaux champs sans casser les anciennes versions des applications.
Installation de protobuf pour C++
Pour utiliser protobuf en C++, deux éléments sont nécessaires : le compilateur protoc (qui transforme les fichiers .proto en code C++) et la bibliothèque protobuf pour C++.
1. Installation du compilateur protoc
Le plus simple est de télécharger un binaire précompilé depuis la page officielle des releases protobuf sur GitHub.
# Exemple pour Linux (Ubuntu/Debian)
sudo apt-get install protobuf-compiler
# Exemple pour macOS (via Homebrew)
brew install protobuf
# Pour Windows, téléchargez protoc-x.x.x-win64.zip et ajoutez le chemin vers protoc.exe à la variable PATH
2. Installation de la bibliothèque protobuf pour C++
Il est recommandé de compiler la bibliothèque depuis les sources ou d'utiliser un gestionnaire de paquets.
# Ubuntu/Debian
sudo apt-get install libprotobuf-dev
# macOS (Homebrew)
brew install protobuf
# Compilation depuis les sources (méthode universelle)
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF ..
make -j$(nproc)
sudo make install
3. Configuration du projet CMake (méthode recommandée)
Ajoutez ceci à votre fichier CMakeLists.txt :
find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
# Compilation automatique des fichiers .proto
file(GLOB PROTO_FILES "*.proto")
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})
add_executable(my_program main.cpp ${PROTO_SRCS})
target_link_libraries(my_program ${Protobuf_LIBRARIES})
Démarrage rapide avec un exemple de code
Créons un exemple simple pour illustrer les bases. Définissons une structure de données pour un contact.
Étape 1 : Créer le fichier .proto
Fichier contact.proto :
syntax = "proto3";
package tutorial;
message Person {
string name = 1;
int32 age = 2;
string email = 3;
}
Étape 2 : Générer le code C++
protoc --cpp_out=. contact.proto
Après exécution, les fichiers contact.pb.h et contact.pb.cc apparaissent.
Étape 3 : Écrire le code C++
Fichier main.cpp :
#include <iostream>
#include <fstream>
#include "contact.pb.h"
using namespace std;
int main() {
// Vérifions que la bibliothèque est initialisée
GOOGLE_PROTOBUF_VERIFY_VERSION;
// 1. Créer un objet Person et le remplir
tutorial::Person per Aussi dans la bibliothèque
Internationalisation (i18n) en Kotlin : Guide complet avec exemples
Apprentissage automatique en Rust : aperçu des bibliothèques pour la Data Science
golang-jwt Go : guide complet avec exemples | PythonLib
Gson pour Java : guide complet avec exemples
Conteneur d'injection de dépendances en C++ : bibliothèque Fruit pour l'injection de dépendances