How do I represent a UUID in a protobuf message?
If anything, you want to use string
to avoid problems with endianness. Note that a UUID and a MS GUID that have the same string representation (and therefore are the same "id") have, however, different byte-stream order (big-endian vs little-endian). If you use bytes
in the protocol to communicate between Java using UUID and C# using System.Guid, you could end up with flipped IDs.
I don't have enough reputation points to make a comment, so I have to write this as an answer.
Use a string, not a byte array unlike what some other commenters are saying. According to MS (https://docs.microsoft.com/en-us/dotnet/architecture/grpc-for-wcf-developers/protobuf-data-types), "Don't use a bytes field for Guid values. Problems with endianness (Wikipedia definition) can result in erratic behavior when Protobuf is interacting with other platforms, such as Java."
You should probably use string
or bytes
to represent a UUID. Use string
if it is most convenient to keep the UUID in human-readable format (e.g. "de305d54-75b4-431b-adb2-eb6b9e546014"
) or use bytes
if you are storing the 128-bit value raw. (If you aren't sure, you probably want string
.)
Wrapping the value in a message type called UUID
can be helpful to make the code more self-documenting but will have some performance overhead and isn't strictly required. If you want to do this, define the type like:
message UUID {
required string value = 1;
}
or:
message UUID {
required bytes value = 1;
}