Ecosystem & Advanced
Beyond the happy path
Section titled “Beyond the happy path”By now you can design a schema, define a service, implement it, stream, and secure it. This final module is about everything around that core — the reality that your gRPC service rarely lives alone.
Browsers can’t speak native gRPC. Some clients still want REST and JSON. Your API will outlive its first version. And a fleet of services needs to be observable and testable. Each of those is a solved problem with a well-worn tool, and this module walks through them.
What this module covers
Section titled “What this module covers”| Lesson | What you’ll learn |
|---|---|
| gRPC-Web | Why browsers need a proxy, the gRPC-Web protocol, and Connect |
| gRPC-Gateway & transcoding | Exposing a REST/JSON facade from the same .proto |
| Versioning & evolution | Versioned packages, additive vs breaking changes, buf breaking |
| Observability & testing | Reflection, tracing/metrics, and in-process testing |
The shape of a real deployment
Section titled “The shape of a real deployment”A production gRPC system usually looks less like “clients call one server” and more like a small ecosystem of translators and observers:
flowchart TB browser["browser (gRPC-Web)"] --> proxy["proxy / transcoder"] rest["REST client (JSON)"] --> proxy proxy --> core["gRPC services (v1, v2)"] svc["other gRPC services"] --> core core --> obs["interceptors → metrics · traces · logs"]
The .proto you wrote is still the single source of truth. Everything here — the web client, the REST gateway, the next API version, the tracing — hangs off that same contract.