echoで作ってるRESTサーバにgRPCを足したかったのだけど、さっとやり方が見つからなかったのでメモ
こんな感じのechoのミドルウェアを作って
func GRPCMiddleware(grpcServer *grpc.Server) func(next echo.HandlerFunc) echo.HandlerFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
r := c.Request()
w := c.Response()
if r.ProtoMajor == 2 && strings.Contains(r.Header.Get("Content-Type"), "application/grpc") {
grpcServer.ServeHTTP(w, r)
return nil
}
if err := next(c); err != nil {
c.Error(err)
}
return nil
}
}
}
使う
e.Use(GRPCMiddleware(gRPCServer))
認証とかロギング エラーハンドリングを一元管理できていいです。
そのうちjsからgRPC叩けるようなればgRPCだけでいいんでしょうけど、、
ネタ元
https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go#L51