Die Syntax von Protocol Buffers erinnert also stark an C++ oder Java. Die Protobuf-Version wird dabei immer an erster Stelle deklariert (hier proto3), gefolgt von der Beschreibung des Softwarepakets, dessen Daten Sie strukturieren möchten. Dazu zählen ein eindeutiger Name („tutorial“) und in diesem Code-Beispiel die beiden Java-spezifischen Optionen „java_package“ (Java-Paket, in dem die generierten Klassen gespeichert werden) und „java_outer_classname“ (definiert den Klassennamen, unter dem die Klassen zusammengefasst werden).
Es folgen die Protobuf-Nachrichten, die sich aus beliebig vielen Feldern zusammensetzen können, wobei die typischen Datentypen wie „bool“, „int32“, „float“, „double“, oder „string“ verfügbar sind. Diese kommen im Beispiel auch teilweise zum Einsatz. Jedem Feld einer Message muss dabei wie bereits erwähnt mindestens ein Modifikator zugeordnet sein – also entweder …
- required: Ein Wert für das Feld ist verpflichtend. Fehlt dieser Wert, bleibt die Message „uninitialized“, also nicht initialisiert bzw. unverschickt.
- optional: In einem optionalen Feld kann ein Wert geliefert werden, muss aber nicht. Ist dies nicht der Fall, wird ein als Standard definierter Wert verwendet. Im voranstehenden Code ist beispielsweise der Standardwert „HOME“ (Festnetznummer Zuhause) für den Telefonnummerntyp eingetragen.
- repeated: Felder mit dem Modifikator „repeated“ können beliebig oft wiederholt werden (einschließlich null Mal).
Eine ausführliche Anleitung zur Definition des eigenen Datenformats mit Protocol Buffers finden Sie im Google-Developer-Forum.