I am impressed every time I see how much space a protobuf message takes up compared to json payload, yet I would rather have a way to write more concise RPC declarations at the expense of larger payload size.
The biggest issue I take with protobuf is that it's useful as a _DATA contract_, not so much as an _API contract_.
Before choosing gRPC as my main protocol, a single source of RPC if you will, I'd contemplated a lot, but having a strict-ish syntax with a mature cross-language and cross-platform infra was the key factor for me to jump the wagon.
In hindsight, I still think it was the best choice. I use gRPC-Web for internal web apps, but grew to like writing google.api.http annotations for external consumption via gRPC-JSON transcoding.
P.S: I've been writing some Go these days, and having to write things like `rpc DoSomething(DoSomethingRequest) returns (DoSomethingResponse)` leaves similar aftertaste. It's verbose, the opposite of succinct, it makes my fingers hurt, but ultimately it works.
I am impressed every time I see how much space a protobuf message takes up compared to json payload, yet I would rather have a way to write more concise RPC declarations at the expense of larger payload size.
The biggest issue I take with protobuf is that it's useful as a _DATA contract_, not so much as an _API contract_.
Before choosing gRPC as my main protocol, a single source of RPC if you will, I'd contemplated a lot, but having a strict-ish syntax with a mature cross-language and cross-platform infra was the key factor for me to jump the wagon.
In hindsight, I still think it was the best choice. I use gRPC-Web for internal web apps, but grew to like writing google.api.http annotations for external consumption via gRPC-JSON transcoding.
P.S: I've been writing some Go these days, and having to write things like `rpc DoSomething(DoSomethingRequest) returns (DoSomethingResponse)` leaves similar aftertaste. It's verbose, the opposite of succinct, it makes my fingers hurt, but ultimately it works.