Comment puis-je représenter un UUID dans un protobuf message?
Je veux joindre un UUID à un champ dans ma protobuf message de l'Utilisateur exemple.
message User {
//field containing id as UUID type
required string email;
optional string name;
}
Je sais que protobuf les messages ne sont pas encore en charge l'UUID type. J'ai lu que la meilleure approche est d'avoir un UUID type de message.
Donc je suppose que mon message souhaitez importer mes UUID message proto définition et l'utiliser comme un type de champ comme suit:
import "myproject/UUID.proto";
message User {
required UUID id;
required string email;
optional string name;
}
Ma question est, comment les UUID message ressemble, et comment vais-je encoder/décoder? Je vise Java/Scala et C# compatibilité.
Vous devez vous connecter pour publier un commentaire.
Vous devriez probablement utiliser
string
oubytes
pour représenter un UUID. Utilisationstring
si il est plus commode de garder l'UUID dans le format lisible par l'homme (par exemple,"de305d54-75b4-431b-adb2-eb6b9e546014"
) ou de l'utilisationbytes
si vous êtes le stockage de la valeur 128 bits raw. (Si vous n'êtes pas sûr, vous voulez probablementstring
.)Emballage de la valeur dans un type de message est appelé
UUID
peut être utile pour rendre le code plus d'auto-documentation, mais qui aura des conséquences sur les performances et n'est pas strictement nécessaire. Si vous voulez faire cela, définissez le type:ou:
xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx
, voulez-vous savoir comment obtenir la 128 bits de la valeur brute de cette forme dans la manière la plus efficace possible? Ou toutes les ressources en ligne qui peut me faire aller dans la bonne direction?string
oubytes
pour représenter un UUID est facile. L'ajout d'un type serait nécessaire d'ajouter de la complexité à travers toutes les protobuf mise en œuvre dans toutes les langues. C'est pas la peine.Si quoi que ce soit, vous souhaitez utiliser
string
pour éviter les problèmes avec l'endianness. Notez qu'un UUID et un MS GUID qui ont la même représentation de chaîne (et donc la même "id") ont, toutefois, est différente de l'octet-stream commande (big-endian vs little-endian). Si vous utilisezbytes
dans le protocole pour communiquer entre Java à l'aide de l'UUID et C# à l'aide du Système.Guid, vous pourriez vous retrouver avec retournée Id.bytes
n'entraînerait pas de l'endianness questions. Si, d'autre part, l'UUID est stocké dans deux entiers 64 bits, vous avez à traiter avec l'endianness questions.