2013-04-13 2 views
4

protobuf 메시지로 정의 된 인터페이스가있는 모듈/응용 프로그램으로 구성된 분산 시스템을 구축 중입니다.공개 프로토콜 버퍼 인터페이스

protobuf 메시지를 클라이언트에 직접 노출하는 것이 좋습니까? ... 아니면 각 모듈에 기반한 protobuf에 대한 메소드 기반 인터페이스의 변환에 책임이있는 공유 라이브러리를 준비하는 것이 더 나을 것입니다. 클라이언트는 protobuf에 대해 전혀 알지 못할 것입니다.

답변

5

"좋은 생각"도 나쁜 것도 아닙니다. 이 소비자에게 프로토콜 버퍼를 부과할지 여부에 달려 있습니다. 그 결정의 상당 부분은 다음과 같습니다.

  • 소비자는 누구입니까? protobuf 세부 사항을 그들에게 노출시켜 주시겠습니까?
  • 클라이언트가 protobuf를 지원하는 언어로 작성됩니까?

$ 0.02는 시스템 간, 언어 간 교환을 염두에두고 특별히 고안된 프로토콜 버퍼의 완벽한 사용 사례입니다. .proto 파일은 간결하고 언어에 구애받지 않으며 데이터 형식에 대한 철저한 설명을 제공합니다. 물론이 경로로 향하기로 결정한 유사한 유사/경쟁 형식이 있습니다 (Thrift, Cap'n Proto, etc. 참조).

0

Google의 Protobuf 메시지 클래스를 인수로 사용하는 인터페이스를 Google의 Protobuf 설명서의 thisthat 섹션에 따라 정의하려는 경우 Protobuf 메시지를 클라이언트에 직접 노출하는 것은 좋지 않습니다. 즉, Protobuf의 모든 버전에서 생성 된 코드는 이전 코드와 이진 호환되지 않을 가능성이 높습니다. 그러지 마라.

그러나 함수/메서드 매개 변수로 직렬화 된 Protobuf 메시지를 포함하는 바이트 배열을 사용하는 인터페이스를 정의하려는 경우 Matt Ball의 answer과 완전히 동의합니다.