5 ms·
Or JSON backed by a protobuf schema for validation. Best of both worlds.
by elteto 4y ago
Or 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 agoYep, it's all basically the same thing, with small differences in performance and practicality.