Useful gRPC utilities
Because gRPC is a pain.
Gateway
Abstracts all of the set-up needed for grpc-gateway
, including extracting the required auth headers, etc.
Service
Service is a useful wrapper for creating gRPC services, with grpc-gateway wrappers. It exposes a set of methods for registering a gRPC service, a grpc-gateway endpoint, and regular web endpoints, too.
Example
logger, _ := zap.NewProduction()
conf := config.Load()
dbConn := db.New(conf)
s := service.New(
":9000",
":8080",
logger,
)
// Register a swagger JSON file for docs as a public web endpoint
_ = s.RegisterGatewayEndpoint(func(mux *runtime.ServeMux) error {
return mux.HandlePath(http.MethodGet, "/docs/analytics/swagger.json", func(w http.ResponseWriter, r *http.Request, _ map[string]string) {
gateway.ServeSwaggerFile(w, r)
})
})
// Register the grpc-gateway endpoint
_ = s.RegisterGateway(func(ctx context.Context, mux *runtime.ServeMux, addr string, opts []grpc.DialOption) error {
return pb.RegisterAnalyticsServiceHandlerFromEndpoint(ctx, mux, conf.Addr, opts)
})
// Register the gRPC service itself
s.RegisterService(func(server *grpc.Server) {
pb.RegisterAnalyticsServiceServer(server, grpcTransport.New(logger, conf))
})
// Register the health check endpoint
s.RegisterHealthServer(grpcTransport.NewHealthChecker(logger, dbConn))
// Start service
if err := s.Start(); err != nil {
logger.Panic(err.Error())
}
Last updated