Cú pháp 3 của protobuf làm cho tất cả các trường tùy chọn bỏ các từ khóa required
và optional
từ cú pháp proto2 trước đó. Đọc một số ý kiến từ các nhà phát triển , có vẻ như nó đã được thực hiện để tăng cường khả năng tương thích nhị phân tiến / lùi.
Nhưng đối với tôi, điều đó có thể được thực thi bằng cách chỉ phiên bản tên gói, nói com.example.messages.v1
và sau đó cho phép khách hàng thực hiện trình giải mã mà họ hiểu. Đồng thời, nó loại bỏ một số hợp đồng được nêu là một loại hữu ích theo quan điểm công nghệ phần mềm. Ví dụ nếu tôi có
message Location {
double latitude = 1;
double longitude = 2;
}
Trong proto3 có thể tạo một nửa được hỗ trợ nhưng hoàn toàn hợp lệ Location
bằng cách không cung cấp một trong các trường bắt buộc.
Không phải đó là một nhược điểm lớn khi tạo định dạng tuần tự hóa dựa trên lược đồ để trao đổi dữ liệu giữa các máy khách? Không tệ hơn khi di chuyển mã xác thực bổ sung cho từng khách hàng kiểm tra xem tất cả các trường bắt buộc có giá trị hợp lệ không?