Protocol Buffers - Eine Alternative zu JSON?

Noel H. | Softwareentwickler
10/2024

Effizientere Datenübertragung im Vergleich

Die Übertragung von Daten spielt in der Softwareentwicklung eine wichtige Rolle, besonders wenn es um die Kommunikation zwischen Systemen geht. Hierfür werden meistens Serialisierungsformate wie JSON oder XML verwendet. Neben diesen beiden Formaten gibt es Protocol Buffers, die von Google für die Kommunikation zwischen Servern entwickelt wurden und ein binäres Serialisierungsformat bieten. In diesem Blogartikel wird beleuchtet, was Protocol Buffers sind und warum sie eine Alternative zu JSON darstellen.

Was sind Protocol Buffers?

Protocol Buffers sind ein sprachunabhängiger, plattformneutraler und erweiterbarer Mechanismus zur strukturellen Serialisierung von Daten. Sie werden von Google in internen Umgebungen verwendet, in denen Performance und Ressourceneffizienz entscheidend sind.

Funktionsweise von Protocol Buffers

Die Idee hinter Protocol Buffers ist die Verwendung von kompakten, nummerierten Binärdateien anstelle von textbasierten Dateiformaten. Es wird ein Dateischema in einer Proto-Datei (.proto) definiert, in welcher jeder Datenstruktur ein einzigartiges Tag zugeordnet wird. Mithilfe dieser Tags werden die Felder der binären Datei identifiziert.

Beispiel

Erstellen einer Klasse

In diesem Beispiel definieren wir eine Person mit 4 Feldern (name, id, email, phones) sowie eine Telefonnummer (PhoneNumber) mit 2 Feldern (number, type) und einem Enum (PhoneType). Jedes Feld bekommt eine eindeutige Nummer, da diese in der binären Datei anstelle der Feldnamen verwendet wird.

1// person.proto:
2syntax = "proto3";
3
4message Person {
5    string name = 1;
6    int32 id = 2;
7    string email = 3;
8
9    enum PhoneType {
10        MOBILE = 0;
11        HOME = 1;
12        WORK = 2;
13    }
14
15    message PhoneNumber {
16        string number = 1;
17        PhoneType type = 2;
18    }
19
20    repeated PhoneNumber phones = 4;
21}

Um aus der Proto-Datei eine Klasse zu erstellen, muss der Protocol Buffer Compiler für die gewünschte Sprache heruntergeladen und installiert werden.

Für unser Beispiel benutzen wir den Compiler für C# und das NuGet-Paket „Google.Protobuf“.

Nachdem der Compiler eingerichtet ist, können wir mit dem folgenden Befehl eine Klasse generieren lassen:

1protoc --csharp_out=./ person.proto

Serialisierung


Zur Serialisierung wird die ToByteArray()-Methode aus Google.Protobuf verwendet.

1//Object to be serialized
2 var person = new Person
3 {
4     Name = "John Doe",
5     Id = 1234,
6     Email = "JohnDoe@gmail.com"
7 };
8 //nested object
9 person.Phones.Add(new Person.Types.PhoneNumber
10 {
11     Number = "123-456-7890",
12     Type = Person.Types.PhoneType.Home
13 });
14
15 //Serialize the object
16 byte[] data = person.ToByteArray();

Deserialisierung


Für die Deserialisierung nutzen wir den generierten Parser.

1//Deserialize the object
2Person deserializedPerson = Person.Parser.ParseFrom(data);
3            
4Console.WriteLine($"Name: {deserializedPerson.Name}");
5Console.WriteLine($"ID: {deserializedPerson.Id}");
6Console.WriteLine($"Email: {deserializedPerson.Email}");
7
8for (int i = 0; i < deserializedPerson.Phones.Count; i++)
9{
10    Console.WriteLine("Phones:");
11    var phone = deserializedPerson.Phones[i];
12    Console.WriteLine($"Phone Number {i}: {phone.Number}");
13    Console.WriteLine($"Phone Type {i}: {phone.Type}");
14}

Protocol Buffers vs. JSON

Struktur und Definition

Protocol Buffers sind im Gegensatz zu JSON stark typisiert und basieren auf einer vordefinierten Proto-Datei, die das Datenmodell beschreibt. JSON bietet hier mehr Flexibilität, während Protocol Buffers mehr Typ-Sicherheit bieten.

1//JSON Beispiel 
2{
3    "Name": "John Doe",
4    "Id": "1234",
5    "Email": "JohnDoe@gmail.com",
6    "Phones": [
7        {
8            "Number": "123-456-7890",
9            "PhoneType":1
10        }
11    ]
12}

Effizienz und Leistung

Protocol Buffers sind als binäres Format kompakter und schneller in der Serialisierung. JSON ist hingegen leichter zu lesen und zu verstehen.

Use Cases

JSON ist vor allem in Webanwendungen und APIs weit verbreitet, während Protocol Buffers häufig in ressourcenintensiven internen Systemen, Microservices oder mobilen Apps verwendet werden.

Unterstützung

Protocol Buffers können durch ihren Compiler und die Verwendung spezieller Bibliotheken in vielen Programmiersprachen eingesetzt werden. JSON wird in praktisch allen modernen Programmiersprachen unterstützt.

Fazit

Protocol Buffers bieten eine typisierte und schnellere Lösung zur Datenübertragung als JSON. Bei Webanwendungen ist jedoch weiterhin die Nutzung von JSON zu empfehlen, da dieses Format flexibler, verständlicher und weit verbreitet ist.

Ressourcen

Noel H. | Softwareentwickler
Zurück zur Übersicht

Gemeinsam Großes schaffen

Wir freuen uns auf ein kostenloses Erstgespräch mit Ihnen!
Unser Geschäftsführer Tibor Csizmadia und unser Kundenbetreuer Jens Walter stehen Ihnen persönlich zur Verfügung. Profitieren Sie von unserer langjährigen Erfahrung und erhalten Sie eine kompetente Erstberatung in einem unverbindlichen Austausch.
Foto von Tibor

Tibor Csizmadia

Geschäftsführer
Foto von Jens

Jens Walter

Projektmanager
Devware GmbH verpflichtet sich, Ihre Privatsphäre zu schützen. Wir benötigen Ihre Kontaktinformationen, um Sie bezüglich unserer Produkte und Dienstleistungen zu kontaktieren. Mit Klick auf Absenden geben Sie sich damit einverstanden. Weitere Informationen finden Sie unter Datenschutz.
Vielen Dank für Ihre Nachricht!

Wir haben Ihre Anfrage erhalten und melden uns in Kürze bei Ihnen.

Falls Sie in der Zwischenzeit Fragen haben, können Sie uns jederzeit unter Kontaktanfrage@devware.de erreichen.

Wir freuen uns auf die Zusammenarbeit!
Oops! Something went wrong while submitting the form.
KontaktImpressumDatenschutz