Полезность requiredбыла в центре многих дебатов и пламенной войны. Большие лагеря существуют с обеих сторон. Один лагерь любил гарантировать наличие ценности и был готов жить с ее ограничениями, но другой лагерь чувствовал себя requiredопасным или бесполезным, так как его нельзя было безопасно добавить или удалить.
Позвольте мне объяснить больше причин, почему requiredполя должны использоваться экономно. Если вы уже используете Proto, вы не можете добавить обязательное поле, потому что старое приложение не будет предоставлять это поле, а приложения в целом не справляются со сбоем. Вы можете убедиться, что все старые приложения обновляются в первую очередь, но можно легко ошибиться, и это не поможет, если вы храните прототипы в любом хранилище данных (даже недолговечном, например, memcached). Такая же ситуация применяется при удалении обязательного поля.
Многие обязательные поля были «очевидно» обязательными, пока ... их не было. Допустим, у вас есть idполе для Getметода. Это очевидно требуется. Кроме того, позже вам может потребоваться изменить значение idс int на строку или с int32 на int64. Это требует добавления нового muchBetterIdполя, и теперь у вас осталось старое idполе, которое должно быть указано, но в конечном итоге полностью игнорируется.
Когда эти две проблемы объединены, количество полезных requiredполей становится ограниченным, и лагеря спорят о том, имеет ли оно ценность. Противники requiredбыли не обязательно против идеи, но против ее нынешней формы. Некоторые предлагали разработать более выразительную библиотеку валидации, которая могла бы проверять requiredчто-то более продвинутое name.length > 10, в то же время не забывая иметь лучшую модель сбоев.
Proto3 в целом, кажется, предпочитает простоту, а requiredудаление проще. Но, возможно, более убедительно, удаление имеет requiredсмысл для proto3 в сочетании с другими функциями, такими как удаление присутствия полей для примитивов и удаление переопределяющих значений по умолчанию.
Я не разработчик protobuf и никоим образом не авторитетен в этом вопросе, но я все еще надеюсь, что объяснение будет полезным.