3 ms·
> Protobuf is the worst serialization format and schema IDL, except for all the others. I don't even feel this way. I can complain for days about most technica
by hot_gril 4y ago
> Protobuf is the worst serialization format and schema IDL, except for all the others.
I don't even feel this way. I can complain for days about most technical things, including things Google has made (e.g. Golang), but not protobufs. They're just good. They don't totally replace JSON of course, but for the intended use case of internal distributed systems, they're solid.
- elteto 4y agoOr JSON backed by a protobuf schema for validation. Best of both worlds.
- hot_gril 4y agoGets a little annoying cause of the translation between the two, but it's valid.
- jchw 4y agoIt's also possible to use JSON directly with gRPC/DRPC/Connect, so you can take advantage of a Protobuf IDL and codegen with a bit less of the logistical complexity.
- GauntletWizard 4y agoJSON is good for dumps of your data, for humans reading it, and for interoperability without the schema - On your backends, you should always serialized to proto because it's darn more efficient.
- elteto 4y agoAlways is such a strong word, always ;) Human readable is very important to me. If performance is not an issue I'd rather grep through it.
- hot_gril 4y agoIf it's a startup or a personal project with no special performance requirements, chance of me using protobufs for anything is very slim. Human readability aside, just bothering to set up the serdes and other boilerplate is too low on my list of priorities. Makes more sense at medium scale.
- lmm 4y agoSlapping it all into gRPC is less boilerplate than whatever else you'd be doing (unless you're doing GraphQL or something). I'd always default to doing that (or thrift, honestly, but same difference) unless there were a particular reason to use something like a manual API.
- hot_gril 4y agogRPC requires HTTP/2, which is a nontrivial added requirement. Prevents it from running on Heroku and ironically Google AppEngine, and wherever it does work, load balancers will probably need special setup for it. Even Kubernetes. You can translate it to/from JSON, but that defeats the purpose.
- hot_gril 4y agoOh, gRPC over JSON still gives you the advantage of a well-defined API. But I use OpenAPI aka Swagger for that because it's a much thinner layer, especially if for whatever reason I need to handle HTTP GET (callbacks/webhooks) in addition to my typical HTTP POST JSON.
- lmm 4y ago> gRPC requires HTTP/2, which is a nontrivial added requirement. Prevents it from running on Heroku and ironically Google AppEngine Then use thrift, which does plain http. But most of the design decisions in the article are the same there as well. Turns out there's really only one way to do this.
- hot_gril 4y ago