I'm using protocol buffers and everything is working fine. except that the fact that I don't understand - why do I need the numbered tags in the proto file :
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
Sure I've read the docs :
As you can see, each field in the message definition has a unique numbered tag. These tags are used to identify your fields in the message binary format, and should not be changed once your message type is in use.
I didn't understand what difference does it make if I change it . ( I will create a new proto and compile it - so why does it care ?)
Numbered fields in proto definitions obviate the need for version checks which is one of the explicitly stated motivations for the design and implementation of Protocol Buffers. As the developer documentation states, the protocol was designed in part to avoid “ugly code” like this for checking protocol versions:
if (version == 3) {
...
} else if (version > 4) {
if (version == 5) {
...
}
...
}
Question
Is it just me or it is completely unclear ?
let me ask it in a different way :
If I have a proto file like the above file , and then I change it to :
message SearchRequest {
required string query = 3; //reversed order
optional int32 page_number = 2;
optional int32 result_per_page = 1;
}
What does it care ? I re-compile and add the file ( i've done it multiple times in the last week).
what am I missing ? can you please supply a human-to human explanation for this numbered tags ?
What does it careIn my opinion, you're making a great point here. If you don't really need the backwards compatability then it feels very pointless to have to explicitly declare the numbers. They could (and for my small, internal project, should) be automatically generated. - birgersp