Buscar
Social
Ofertas laborales ES
« Estado actual de los servidores de aplicación | Main | El próximo 11 diciembre se celebra el #DevOSSAzureDays Data World en Madrid »
martes
dic022014

Conceptos básicos de protocol Buffer.

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". 

  • Cómo funciona: primero, al igual que XML tiene su XSD asociado (o puede tenerlo), en este caso existe un fichero de metadatos (o configuración de datos), que es el fichero .proto. Vemos un ejemplo a continuación:

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)

  • Crear un proyecto Java (por ejemplo, utilizando el IDE Eclipse)
  • Definir el formato del mensaje en un fichero .proto, teniendo en cuenta la siguiente sintaxis -> required, campo requerido, optional -&gt; campo opcional, repeated -&gt; campo repetido. Vemos que cada campo tiene un identificador num&eacute;rico (orden) asociado, que existen tipos b&aacute;sicos de datos (entero, string), que se pueden definir tipos enumerados, y que adem&aacute;s se pueden definir campo representados por tipos complejos (compuesto por campos con diferentes tipos b&aacute;sicos y / o compuestos), de manera anidada. En el fichero a continuaci&oacute;n, vemos como AdressBook (que le precede la palabra message para indicar que es un mensaje), est&aacute; compuesto de personas (relaci&oacute;n 0..n por la palabra repeated), que a su vez se compone de un nombre obligatoriamente (string required), un id obligatorio (int required), un email opcional, y un tel&eacute;fono que responde a un tipo compuesto (phone), compuesto a su vez por un campo con el n&uacute;mero (requerido) y el tipo de tel&eacute;fono (campo enumerado con tres valores diferentes).
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>
}
  • Utilizar el compilador de protocol buffer (previa instalación) para generar las clases correspondientes. Para ello, descargar el código fuente de https://developers.google.com/protocol-buffers/docs/downloads.html, seguir las intrucciones de README.txt para realizar el compilado y ejecutable del código fuente, y ejecutar la sentencia correspondiente

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


  • Utilizar la API de Java de protocol buffer para escribir y leer mensajes.

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments (1)

Hola Jaime, me encargaron preparar una integracion con Doubleclick Data Platform (google) en la que debo enviar un listado de cookies hacia un user-list que debo crear primero, para lo cual, debo utilizar el "protocol buffer". Estas son las instrucciones que me enviaron: "Once the data-owner has a user-list-id and the set of cookies to be added to the list in the Google user-id space, they can make requests to Google servers to add/remove members from a list. The request will be expected to be sent at https://cm.g.doubleclick.net/upload?nid=<Google-network-id> via HTTPS POST with the payload being an encoded protocol buffer describing the list/cookies to be modified."
Tienes tu idea de como puedo enviar protocol buffer via https post? has trabajado algo similar? Graicias.

mayo 6, 2015 | Unregistered Commenterjrodriguez

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>