protobuf의 구문 (3)는 키워드를 삭제 옵션 모든 필드를 만든 required
및 optional
이전 proto2 구문에서. 개발자의 의견을 읽으면 앞으로 / 뒤로 바이너리 호환성을 향상시키기 위해 수행 된 것으로 보입니다.
그러나 저에게는 패키지 이름의 버전을 지정하고 com.example.messages.v1
클라이언트가 이해하는 디시리얼라이저를 구현하도록하면됩니다. 동시에 소프트웨어 엔지니어링 관점에서 유용한 유형으로 언급 된 일부 계약을 제거합니다. 예를 들어
message Location {
double latitude = 1;
double longitude = 2;
}
proto3에서는 Location
필수 필드 중 하나를 제공하지 않으면 서 반이 지원되지만 완벽하게 유효 합니다.
클라이언트간에 데이터를 교환하기 위해 스키마 기반 직렬화 형식을 만들 때 큰 단점이 아닙니까? 모든 필수 필드에 유효한 값이 있는지 확인하는 추가 검증 코드를 각 클라이언트로 옮기는 것이 나쁘지 않습니까?