connectrpc.com/grpcreflect
adds support for gRPC's server reflection API to any
net/http
server — including those built with Connect. With
server reflection enabled, ad-hoc debugging tools can call your gRPC-compatible
handlers and print the responses without a copy of the schema.
The exposed reflection API is wire compatible with Google's gRPC implementations, so it works with grpcurl, grpcui, BloomRPC, and many other tools.
For more on Connect, see the announcement blog post, the documentation on connectrpc.com (especially the Getting Started guide for Go), the Connect repo, or the demo service.
package main
import (
"net/http"
"golang.org/x/net/http2"
"golang.org/x/net/http2/h2c"
"connectrpc.com/grpcreflect"
)
func main() {
mux := http.NewServeMux()
reflector := grpcreflect.NewStaticReflector(
"acme.user.v1.UserService",
"acme.group.v1.GroupService",
// protoc-gen-connect-go generates package-level constants
// for these fully-qualified protobuf service names, so you'd more likely
// reference userv1.UserServiceName and groupv1.GroupServiceName.
)
mux.Handle(grpcreflect.NewHandlerV1(reflector))
// Many tools still expect the older version of the server reflection API, so
// most servers should mount both handlers.
mux.Handle(grpcreflect.NewHandlerV1Alpha(reflector))
// If you don't need to support HTTP/2 without TLS (h2c), you can drop
// x/net/http2 and use http.ListenAndServeTLS instead.
http.ListenAndServe(
":8080",
h2c.NewHandler(mux, &http2.Server{}),
)
}
This module is stable. It supports:
- The three most recent major releases of Go. Keep in mind that only the last two releases receive security patches.
- APIv2 of Protocol Buffers in Go (
google.golang.org/protobuf
).
Within those parameters, grpcreflect
follows semantic versioning.
We will not make breaking changes in the 1.x series of releases.
Offered under the Apache 2 license.