2017-12-05 1 views
1

,protobuf를 사용하여 패키지를 변경하면 기존 클라이언트가 중단됩니까? 내가 변경하는 경우

syntax = "proto3"; 

package a.v0; 

message HtmlStore{ 
    string html = 1; 
} 

syntax = "proto3"; 

package a; 

message HtmlStore{ 
    string html = 1; 
} 

에 내가 protobuf를 반환하는 파이썬 API가 있습니다. API를 사용하는 기존 클라이언트가 있습니다. 특정 요소의 프로토 타입 정의를 변경하고 싶습니다. 기존 클라이언트를 손상시킬 수 있는지 알고 싶습니다.

답변

3

참고 : JSON 인코딩을 사용하는 경우 모든 베팅은 꺼져 있습니다.

당신이 인코딩을 사용하는 경우 package 와이어 형식의 일반적으로 일부가 아닌 - 하지 않는 한 당신은 google.protobuf.Any 기능을 사용했습니다.

따라서 Any을 사용하지 않았다고 가정하면 package을 변경하면 전송되는 내용이 완전히 보이지 않으며 아무도 영향을받지 않습니다.

그러나! .proto의 업데이트 된 버전을 받고 빌드의 일부로 code-gen을 실행하면 이전에 작동하는 코드가 컴파일을 중단 할 수 있습니다. 즉, 해당 유형을 참조하는 코드에서 .v0을 제거해야합니다.

필드 번호 (html의 경우 1), 와이어 유형 (길이 접두어가 html 인 경우 - 와이어 유형 2) 및 실제 값. HtmlStorehtml (같은 조건으로 다시 Any 등)의 이름을 안전하게 바꿀 수 있습니다.

관련 문제