Синтаксис 3 протобуфа зробив усі поля необов’язковими для випадання ключових слів required
та optional
попереднього синтаксису прото2. Читаючи деякі коментарі розробників, здається, що це було зроблено для підвищення бінарної сумісності вперед / назад.
Але для мене це може бути застосовано просто версією імен пакунків, скажіть, com.example.messages.v1
а потім дозвольте клієнтам впроваджувати розбираються у них десеріалізатори. Одночасно він вилучає деякі контракти, зазначені як тип, корисні з точки зору інженерії програмного забезпечення. Наприклад, якщо я маю
message Location {
double latitude = 1;
double longitude = 2;
}
У proto3 можна створити напівзахисну, але цілком дійсну Location
, не надавши жодне з необхідних полів.
Це не великий недолік під час створення формату серіалізації на основі схеми для обміну даними між клієнтами? Чи не гірше перемістити додатковий код перевірки на кожного клієнта, перевіривши, чи всі обов'язкові поля мають дійсні значення?