Wie kann ich darstellen einer UUID in eine protobuf Nachricht?
Möchte ich anfügen einer UUID auf ein Feld in meiner protobuf Benutzer-Nachricht Beispiel.
message User {
//field containing id as UUID type
required string email;
optional string name;
}
Ich weiß, dass protobuf-messages noch nicht unterstützt werden, die UUID-Typ. Ich habe gelesen, dass der beste Ansatz ist, um eine UUID Nachricht geben.
Also ich vermute, meine Benutzer-Nachricht würde der import meiner UUID Nachricht proto-definition und verwenden Sie es als ein Feld Typ wie folgt:
import "myproject/UUID.proto";
message User {
required UUID id;
required string email;
optional string name;
}
Meine Frage ist, wie werden die UUID Nachricht Aussehen, und wie muss ich enkodieren/Dekodieren? Ich bin mit dem Ziel für Java/Scala und C# - Kompatibilität.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie wahrscheinlich verwenden
string
oderbytes
zur Darstellung einer UUID. Verwendenstring
wenn es ist am bequemsten, halten Sie die UUID, die in für Menschen lesbaren format (z.B."de305d54-75b4-431b-adb2-eb6b9e546014"
) oder verwenden Siebytes
wenn Sie die Speicherung der 128-bit-raw-Wert. (Wenn Sie nicht sicher sind, möchten Sie wahrscheinlichstring
.)Wickeln Sie den Wert in einen message-Typ genannt
UUID
können hilfreich sein, um den code mehr selbst dokumentieren, sondern haben einen gewissen performance-overhead und ist nicht unbedingt notwendig. Wenn Sie dies tun möchten, legen Sie die Art wie:oder:
xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx
, würden Sie wissen, wie man die 128-bit-raw-Wert aus diesem Formular in die effizienteste Art und Weise möglich? Oder irgendwelche online-Ressourcen, die mich in die richtige Richtung gehen?string
oderbytes
zur Darstellung eines UUID ist einfach. Hinzufügen eines built-in-Typ erfordern würde, die Komplexität der ganzen protobuf Umsetzung in jeder Sprache. Es lohnt sich nicht.Wenn etwas, das Sie verwenden möchten
string
um keine Probleme mit der endianness. Beachten Sie, dass eine UUID und ein MS-GUID, die den gleichen string-Darstellung (und daher werden die gleichen "id") haben, jedoch unterschiedliche byte-stream-Reihenfolge (big-endian vs. little-endian). Wenn Siebytes
im Protokoll für die Kommunikation zwischen Java mit UUID und C# using System.Guid, könnten Sie am Ende mit flipped-IDs.bytes
würde nicht dazu führen, alle endian-Probleme. Wenn auf der anderen Seite, die UUID gespeichert wurde in zwei 64-bit-Ganzzahlen, würden Sie haben, um mit endianness Probleme.