Protobuf sözdizimi 3 kelime bırakarak isteğe tüm alanları yapılmış required
ve optional
önceki proto2 sözdiziminden. Geliştiricilerden bazı yorumları okumak , ileri / geri ikili uyumluluğu arttırmak için yapıldığı anlaşılıyor.
Ama benim için, bu sadece paket adlarının sürümlendirilmesi ile zorlanabilirdi, com.example.messages.v1
ve sonra müşterilerin anladıkları serileştiricileri uygulamalarına izin verin. Aynı zamanda, bir yazılım mühendisliği açısından yararlı olan, tür olarak belirtilen bazı sözleşmeleri kaldırır. Mesela eğer
message Location {
double latitude = 1;
double longitude = 2;
}
Proto3'te Location
, zorunlu alanlardan birini sağlayarak yarı yedekli ancak mükemmel bir şekilde oluşturmak mümkündür .
İstemciler arasında veri alışverişi için şema tabanlı bir serileştirme biçimi oluştururken bu büyük bir dezavantaj değil mi? Gerekli tüm alanların geçerli değerlere sahip olup olmadığını kontrol ederek her istemciye ekstra doğrulama kodu taşımak daha kötü değil mi?