- Web quickstart - uses grpc-web
- Node.js quickstart
- There are two grpc Nodejs implementations: one with dynamically generated code and another with statically generated code.
- gateway repo
- Streaming support is mixed:
- Supported: "Mapping streaming APIs to newline-delimited JSON streams"
- Not supported: "True bi-directional streaming"
- The readme lists other supported / not supported features
This tool generates golang code. You could probably use it alongside other languages, but it's unclear how to do so: all the example code is in golang. See this issue on Java support.
gRPC Gateway hit 1.0 in 2016 and is actively maintained. There isn't a ton of documentation on this toolset, though, and grpc-web seems like the way forward.
This repo is in the "grpc-ecosystem" org.
grpc-web hit 1.0 in October 2018, so there's a limited amount of info on Stack Overflow. Post-1.0 issues like "index.js is missing" don't give me great confidence that grpc-web is actually stable yet.
The clent requires an Envoy gateway. This is definitely the future, but Envoy won't be an official, supported part of OpenShift until OpenShift 4.0.
This repo is in the main "grpc" org. The web quickstart uses grpc-web. While this tool is new, it also appears to be the way forward for connecting clients to gRPC servers.
- Protobuf method names are free-form and typically include a verb (e.g,
GetFeature
,ListFeatures
,RecordRoute
), so consider following something like Google Cloud's naming conventions. - The tutorials on grpc.io cover the basics for each language, but there are no intermediate or advanced tutorials. There are only auto-generated reference docs and a couple of iOS/Android sample apps.
- gRPC Adoption in GIPHY
- Migrating to gRPC produced significantly better performance but also introduced non-trivial Kubernetes issues.
- Take a REST with HTTP/2, Protobufs, and Swagger
- Covers gRPC gateway. From CoreOS.
- The state of gRPC in the Browser
- REST - Widely supported and robust tooling, but doesn't support true streaming.
- GraphQL - Query for just the data you need. There's a spec for streaming, but it's only implemented by a few GraphQL servers.
- Use Kafka, and connect to one of its APIs - see The Kafka API Battle.
- socket.io and Feathers - promising, but focused on the JavaScript ecosystem.
- STOMP - Not super cutting-edge, but supported by a variety of implementations including one for Spring Boot.