为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang GRPC 服务器中处理 REST 请求

在 golang GRPC 服务器中处理 REST 请求

Go
慕仙森 2022-08-24 10:47:28
用 golang 编写的 GRPC 服务器是否有可能同时处理 REST 请求?我已经找到了gpc网关,它可以将现有的原型模式转换为休息端点,但我认为这不适合我的需求。我已经编写了一个GRPC服务器,但我还需要处理来自外部服务(如Github或Stripe)的Webhook请求。我正在考虑编写第二个基于REST的服务器来接受这些webhook(并可能将它们转换/转发到GRPC服务器),但这似乎是一种代码气味。理想情况下,我希望我的GRPC服务器也能够,例如,在端点处处理REST请求,例如,或者我不确定这是否可能,以及是否如何配置它。/webhook/event
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

看起来我先问了我的问题,然后付出了足够的努力来解决我自己的问题。下面是将 REST 请求与 GRPC 请求一起提供服务的示例


func main() {

    lis, err := net.Listen("tcp", ":6789")

    if err != nil {

        log.Fatalf("failed to listen: %v", err)

    }


    // here we register and HTTP server listening on port 6789

    // note that we do this in with gofunc so that the rest of this main function can execute - this probably isn't ideal

    http.HandleFunc("/event", Handle)

    go http.Serve(lis, nil)


    // now we set up GRPC

    grpcServer := grpc.NewServer()


    // this is a GRPC service defined in a proto file and then generated with protoc

    pipelineServer := Server{}


    pipeline.RegisterPipelinesServer(grpcServer, pipelineServer)



    if err := grpcServer.Serve(lis); err != nil {

        log.Fatalf("failed to serve: %s", err)

    }

}


func Handle(response http.ResponseWriter, request *http.Request) {

    log.Infof("handling")

}

如上所述,发送 to 将导致发出日志行。POSTlocalhost:6789/eventhandling


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信