Single endpoint for web+ui (Issue #4). Migrated to modern protobuf+grpc.

This commit is contained in:
jamesread
2021-05-24 22:02:21 +01:00
parent d4e6a7475d
commit 37b9e2d66f
16 changed files with 256 additions and 183 deletions

View File

@@ -0,0 +1,54 @@
package httpservers
import (
"context"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
log "github.com/sirupsen/logrus"
"google.golang.org/grpc"
"google.golang.org/protobuf/encoding/protojson"
"net/http"
gw "github.com/jamesread/OliveTin/gen/grpc"
cors "github.com/jamesread/OliveTin/internal/cors"
config "github.com/jamesread/OliveTin/internal/config"
)
var (
cfg *config.Config
)
func startRestAPIServer(globalConfig *config.Config) error {
cfg = globalConfig
log.WithFields(log.Fields{
"address": cfg.ListenAddressGrpcActions,
}).Info("Starting REST API")
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel()
// The JSONPb.EmitDefaults is necssary, so "empty" fields are returned in JSON.
//mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
mux := runtime.NewServeMux(
runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{
Marshaler: &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
UseProtoNames: true,
EmitUnpopulated: true,
},
},
}),
)
opts := []grpc.DialOption{grpc.WithInsecure()}
err := gw.RegisterOliveTinApiHandlerFromEndpoint(ctx, mux, cfg.ListenAddressGrpcActions, opts)
if err != nil {
log.Fatalf("gw error %v", err)
}
return http.ListenAndServe(cfg.ListenAddressRestActions, cors.AllowCors(mux))
}