Sintaks 3 protobuf membuat semua bidang opsional menjatuhkan kata kunci required
dan optional
dari sintaks proto2 sebelumnya. Membaca beberapa komentar dari pengembang tampaknya itu dilakukan untuk meningkatkan kompatibilitas biner maju / mundur.
Tetapi bagi saya, itu bisa ditegakkan dengan hanya versi nama paket, katakan com.example.messages.v1
dan kemudian biarkan klien untuk menerapkan deserializer yang mereka mengerti. Pada saat yang sama menghapus beberapa kontrak yang dinyatakan sebagai jenis yang berguna dari sudut pandang rekayasa perangkat lunak. Misalnya kalau sudah
message Location {
double latitude = 1;
double longitude = 2;
}
Dalam proto3 dimungkinkan untuk membuat setengah didukung tetapi valid sempurna Location
dengan tidak memberikan salah satu bidang yang diperlukan.
Bukankah itu kelemahan besar ketika membuat format serialisasi berbasis skema untuk bertukar data antara klien? Bukankah lebih buruk untuk memindahkan kode validasi tambahan ke setiap klien memeriksa bahwa semua bidang yang diperlukan memiliki nilai yang valid?