A utilidade de requiredtem estado no centro de muitos debates e guerras de chamas. Grandes campos existem em ambos os lados. Um campo gostava de garantir a presença de um valor e estava disposto a viver com suas limitações, mas o outro campo parecia requiredperigoso ou inútil, pois não pode ser adicionado nem removido com segurança.
Deixe-me explicar mais sobre o motivo pelo qual os requiredcampos devem ser usados com moderação. Se você já estiver usando um proto, não poderá adicionar um campo obrigatório, pois os aplicativos antigos não fornecerão esse campo e os aplicativos em geral não lidam bem com a falha. Você pode garantir que todos os aplicativos antigos sejam atualizados primeiro, mas pode ser fácil cometer um erro e não ajuda se você estiver armazenando os protos em qualquer armazenamento de dados (mesmo de curta duração, como o cache de memórias). O mesmo tipo de situação se aplica ao remover um campo obrigatório.
Muitos campos obrigatórios eram "obviamente" necessários até ... não eram. Digamos que você tenha um idcampo para um Getmétodo. Isso é obviamente necessário. Exceto, mais tarde, pode ser necessário alterar idde int para string ou int32 para int64. Isso requer a adição de um novo muchBetterIdcampo e agora você fica com o idcampo antigo que deve ser especificado, mas eventualmente é completamente ignorado.
Quando esses dois problemas são combinados, o número de requiredcampos benéficos se torna limitado e os campos discutem se ele ainda tem valor. Os oponentes de requirednão eram necessariamente contra a idéia, mas sua forma atual. Alguns sugeriram o desenvolvimento de uma biblioteca de validação mais expressiva que pudesse requiredacompanhar algo mais avançado name.length > 10, além de garantir um melhor modelo de falha.
No geral, o Proto3 parece favorecer a simplicidade e a requiredremoção é mais simples. Mas talvez mais convincente, a remoção requiredfizesse sentido para o proto3 quando combinada com outros recursos, como a remoção da presença de campo para primitivas e a remoção de valores padrão superiores.
Não sou desenvolvedor de protobuf e não sou autoritário sobre o assunto, mas ainda espero que a explicação seja útil.