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 -> campo opcional, repeated -> campo repetido. Vemos que cada campo tiene un identificador numérico (orden) asociado, que existen tipos básicos de datos (entero, string), que se pueden definir tipos enumerados, y que además se pueden definir campo representados por tipos complejos (compuesto por campos con diferentes tipos básicos y / o compuestos), de manera anidada. En el fichero a continuación, vemos como AdressBook (que le precede la palabra message para indicar que es un mensaje), está compuesto de personas (relació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éfono que responde a un tipo compuesto (phone), compuesto a su vez por un campo con el número (requerido) y el tipo de telé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.
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.