La sintaxis de Protocol Buffers recuerda mucho a la de C++ o a la de Java: en primer lugar, se especifica la correspondiente versión de Protobuf, en este caso, proto3, seguida de la descripción del paquete de software cuyos datos se desea estructurar, que siempre incluye un nombre único (aquí, tutorial). En nuestro ejemplo de código, se añaden también las dos opciones específicas de Javajava_package (paquete de Java en el que se guardan las clases generadas) y java_outer_classname (que define el nombre bajo el cual se designan las clases).
A continuación, figuran los mensajes de Protobuf, que pueden estar compuestos por un número ilimitado de campos. Entre ellos, disponemos de los tipos de datos típicos como bool, int32, float, double o string, algunos de los cuales también se utilizan en el ejemplo. Como ya hemos mencionado, a cada campo se le debe asignar al menos uno de los siguientes tres modificadores:
- required: indica que es obligatorio asignar un valor al campo. En caso contrario, el estado del mensaje es uninitialized, es decir, sin inicializar o sin enviar.
- optional: en los campos opcionales, es posible indicar un valor, aunque no es necesario. Si no hay ningún valor, se utiliza uno definido como estándar. En el código de nuestro tutorial, por ejemplo, se introduce el valor predeterminado HOME (número de teléfono fijo) para el tipo de número de teléfono.
- repeated: los campos con este modificador pueden repetirse un número indefinido de veces (incluso ninguna).
En el foro para desarrolladores de Google, encontrarás información detallada sobre cómo definir tu propio formato de datos con Protocol Buffers.