Conceptos básicos de protocol Buffer.
martes, diciembre 2, 2014 at 10:56PM
jcarmonaloeches in Google, Protocol Buffer, java

Cuestión: en la actualidad, existe mucha información de datos transmitida entre diferentes máquinas / servidores.

Esto conlleva a la necesidad obligada de definir un formato comprensible entre dichas máquinas.

Véase, todas las máquinas entienden binario... podemos compartir información binaria entre ellas, pero dicha información debe tener un sentido. Podemos, entonces, yendo a niveles superiores, definir objetos de Java y serializarlos, o bien, podemos definir un lenguaje de intercambio de datos, como XML, y transmitir la información en este lengüaje.

En este escenario (compartición de datos entre sistemas), en un escenario ya maduro, entran los ingenieros de desarrollo de Google con Protocol Buffers.... y no defraudan (en principio)

A continuación, vemos un minitutorial y los conceptos básicos de esta "tecnología"

La página raíz de la información pública del proyecto está en: https://developers.google.com/protocol-buffers/docs/overview

"Protocol buffers es un mecanismo flexible, automatizado y eficiente para serializar datos estructurados, piensa en XML, pero más simple, más pequeño y más rápido". 

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

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

 

¿Por qué no usar XML?: porque este mecanismo es más ismple, de 3 a 10 veces más pequeño, de 20 a 100 veces más rápido, menos ambiguo, genera clases de acceso a datos muy fáciles de usar a nivel programático.

Veamos un ejemplo de representación de dato en XML y Protocol Buffer

 <person>
    <name>John Doe</name>
    <email>jdoe@example.com</email>
  </person>
person {
  name: "John Doe"
  email: "jdoe@example.com"
}

Haciendo uso de protocol buffer en Java (fuente https://developers.google.com/protocol-buffers/docs/javatutorial)

package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

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

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;</strong></em>
}

protoc -I=$SRC_DIR  --java_out=$SRC_DIR $SRC_DIR/addressbook.proto

Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.