6 ms·
Do you have a preferred message protocol?
by drunner 2y ago
Do you have a preferred message protocol?
- VHRanger 2y agoJSON with a good schema if you're doing it across languages?
- swatcoder 2y agoXML, JSON, and YAML belong to a totally diffent class of use than protobuf, flatbuffers, capnproto, etc It's like comparing apples and screwdrivers.
- hot_gril 2y agoThey're comparable for a lot of use cases. In fact many protobuf-based APIs will also have a JSON mode.
- swatcoder 2y agoExactly because the consumers of those API's exhibit a strong preference for one or the other. Library/module/API developers often seek to deliver maximimum adaptibility in their interfaces so that consumers of them can satisfy their own more specific/pressing requirements.
- dilyevsky 2y agoimo it's mainly because protos are unusable on the web without something like grpc-web (which requires a proxy) and in general web support in protobufs always seemed like an afterthought, just barely working (if at all) which is kind of ironic considering it came out of Google
- hot_gril 2y agoI've never used protobufs with web, but I don't see why not. gRPC, on the other hand, requires HTTP/2 which can be a luxury. I remember making a side project that uses gRPC a while ago and trying to deploy on GCP AppEngine, only to find out it doesn't support gRPC.
- dilyevsky 2y agowell if you can't use gRPC which, as you correctly notes, is protocol-incompatible with browser APIs, you kinda need to roll your own RPC framework. Various attempts had been made at this - see connectrpc, for example, by the same company that authored this post. imo, big advantage of protobuf/gRPC ecosystem is that Google is doing all the heavy lifting for you, so unless something else catches on with wider community it's going to be pretty risky beyond hobby projects.
- hot_gril 2y agoYeah, that's why I wouldn't do it. Not totally unusable, but painful.
- rco8786 2y ago> I've never used protobufs with web, but I don't see why not We have a bunch of apis like this where I work. It's a huge pain, tbh. You lose the ability to just curl endpoints, or to see what data came over the wire for debugging, not to mention having to use esoteric client libs because every off-the-shelf one just assumes json over http.
- sagarm 2y agoJSON is the serialization format. What's the IDL?
- hot_gril 2y agoI've seen OpenAPI/Swagger in the wild a few times. It's a good way to specify the API for an HTTP server, whether it's JSON or something else. Biggest downside is the confusing name change.
- TillE 2y agoI'm sure there's some great schema implementation that you can bolt onto JSON, but personally I have never seen anyone actually using one in the wild. With protobuf the schema is essential, it is the foundation. I feel this is a huge advantage especially for communication protocols.
- VHRanger 2y agoWe've used it. It's useful to define the contract between teams. So you have 2 teams do a meeting, we work out a contract we like, dump that into a jsonschema and you can enforce by unit tests that schema is respected on each side (producer/consumer)