protocol protobuf google data buffers protocol-buffers uuid

protocol-buffers - protobuf - protocol buffer list



¿Cómo represento un UUID en un mensaje protobuf? (2)

En todo caso, desea utilizar la string para evitar problemas con el endianness. Tenga en cuenta que un UUID y un MS GUID que tienen la misma representación de cadena (y por lo tanto son la misma "identificación") tienen, sin embargo, un orden de flujo de bytes diferente (big-endian vs little-endian). Si usa bytes en el protocolo para comunicarse entre Java usando UUID y C # usando System.Guid, podría terminar con las identificaciones volteadas.

Quiero adjuntar un UUID a un campo en mi ejemplo de mensaje de usuario protobuf.

message User { // field containing id as UUID type required string email; optional string name; }

Sé que los mensajes de protobuf todavía no admiten el tipo UUID. He leído que el mejor enfoque es tener un tipo de mensaje UUID.

Así que supongo que mi mensaje de Usuario importaría mi definición de proto de mensaje UUID y lo usaría como un tipo de campo así:

import "myproject/UUID.proto"; message User { required UUID id; required string email; optional string name; }

Mi pregunta es, ¿cómo se verá el mensaje UUID y cómo lo codificaré / decodificaré? Estoy apuntando a la compatibilidad de Java / Scala y C #.


Probablemente debería usar una string o bytes para representar un UUID. Use la string si es más conveniente para mantener el UUID en un formato legible (por ejemplo, "de305d54-75b4-431b-adb2-eb6b9e546014" ) o use bytes si está almacenando el valor sin formato de 128 bits. (Si no está seguro, es probable que desee una string ).

Ajustar el valor en un tipo de mensaje llamado UUID puede ser útil para hacer que el código se autodocumente, pero tendrá una sobrecarga de rendimiento y no es estrictamente necesario. Si quieres hacer esto, define el tipo como:

message UUID { required string value = 1; }

o:

message UUID { required bytes value = 1; }