Ir al contenido principal

gRPC: protobuff (Protocol Buffers)

Los Protocol Buffers son mecanismos extensibles neutrales al idioma y a la plataforma para serializar datos estructurados.

Al compilar un archivo *.proto podemos elegir lenguajes como: Java, PHP, C#, Python y otros más.

Una definición de proto podría lucir así:

person.proto

message Person {
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;
}

Y al generarse el código, por ejemplo en Java, la definición podría emplearse de la siguiente forma:

Person juan = Person.newBuilder()
    .setId(1234)
    .setName("Juan aldama")
    .setEmail("juan.aldama@spgf.dev.com")
    .build();
output = new FileOutputStream("salida.dat");
juan.writeTo(output);

Pero... ¿cómo instalamos Protobuf?

Para Windows podemos usar Chocolatey:

$ choco install protoc

Para Windows también podemos optar por descargar:

https://github.com/google/protobuf/releases

Extraer a C:\proto3 y crear la variable de entorno usando esta dirección: C:\proto3\bin

Para Linux podemos teclear:

$ sudo apt install -y protobuf-compiler

Comprobamos la instalación:

$ protoc --version

¿Y qué con los lenguajes de programación?

Si queremos usar Python con Protobuf debemos teclear esto para instalarlo:

$ pip install protobuf

Y esto es la forma para generar código Python usando Protobuf:

$ protoc --python_out=pyi_out:output_dir

Para crear un archivo *.proto es necesario saber que existen diferentes tipos de datos: los escalares numéricos como:

int32, int64, sint32, sint64, uint32, uint64, fixed32, fixed64, sfixed32, sfixed64, float, double

Además de otros tipos:

bytes, bool, string ...

Un archivo *.proto, por así decirlo, es similar a una clase Java, C++ o C# donde se específica el nombre de la "clase" y sus "atributos".

usuario.proto

message Usuario{
   string nombre = 1;
   optional string apellidos = 2;
   bool activo = 3;
   Direccion direccion = 4;
}

Puedes usar otras definiciones proto como miembros al importarlos a otro archivo. Crear tipos y enumeraciones similar a como se hace en lenguajes como Java, C/C++ y C#. Y así crear archivos relativamente complejos con una lógica bien definida.

En próximas entregas veremos ejemplos en

Si quisieramos generar código java del archivo person.proto teclearíamos:

protoc --java_out=java proto/person.proto

Si esto funcionó correctamente, tendremos nuestro código Java generado (PersonOuterClass.java). Más ejemplos en próximas entregas.

Enlaces:

https://protobuf.dev/

Comentarios