-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Description
What version of gRPC are you using?
gRPC 1.10
What version of Go are you using (go version
)?
go version go1.10 linux/amd64
What operating system (Linux, Windows, …) and version?
$ uname -a
Linux johan-x1 4.15.3-2-ARCH #1 SMP PREEMPT Thu Feb 15 00:13:49 UTC 2018 x86_64 GNU/Linux
What did you do?
I tried using grpc/reflection
library with gogo/protobuf
.
What did you expect to see?
I expected to be able to use an alternative to golang/protobuf
with gRPC reflection.
What did you see instead?
I found that the gRPC reflection library imports github.com/golang/protobuf
. I also found it is tightly coupled to this implementation. As I understand, gRPC is meant to be codec agnostic, what with official support for flatbuffers, and the nice Codec interface existing in grpc-go. Given this, it is surprising that it is so tighly coupled to golang/protobuf
, and perhaps by extension so coupled to protobuf itself.
I propose some sort of interface is defined in the reflection library so that a user can choose which backend to make use of for resolving protobuf types. As I see it, the reflection library makes use of the following functions (illustrated as an interface) from golang/protobuf:
type Protoer interface {
MessageType(string) reflect.Type
FileDescriptor(string) []byte
Unmarshal([]byte, proto.Message) error
Marshal(proto.Message) ([]byte, error)
RegisteredExtensions(proto.Message) map[int32]*proto.ExtensionDesc
}
Ideally, I'd like to be able to use gogo/protobuf with gRPC reflection, but the current implementation would force me to reimplement the reflection server in gogo/protobuf manually.
Any thoughts on this greatly appreciated.