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

在golang GRPC服务器中处理REST请求,rest,go,grpc,grpc-go,Rest,Go,Grpc,Grpc Go,用golang编写的GRPC服务器是否也可以处理REST请求 我已经找到了一个可以将现有原型模式转换为rest端点的方法,但我认为这不适合我的需要 我已经编写了一个GRPC服务器,但我还需要为来自外部服务(如Github或Stripe)的webhook请求提供服务。我正在考虑编写第二个基于REST的服务器来接受这些Webhook(并可能将它们翻译/转发到GRPC服务器),但这似乎是一种代码味道 理想情况下,我希望我的GRPC服务器也能够处理端点上的REST请求,例如/webhook或/event

用golang编写的GRPC服务器是否也可以处理REST请求

我已经找到了一个可以将现有原型模式转换为rest端点的方法,但我认为这不适合我的需要

我已经编写了一个GRPC服务器,但我还需要为来自外部服务(如Github或Stripe)的webhook请求提供服务。我正在考虑编写第二个基于REST的服务器来接受这些Webhook(并可能将它们翻译/转发到GRPC服务器),但这似乎是一种代码味道


理想情况下,我希望我的GRPC服务器也能够处理端点上的REST请求,例如
/webhook
/event
,但我不确定这是否可行,以及这是否是如何配置的。

看起来我是在付出足够大的努力解决问题之前问了我的问题。下面是一个与GRPC请求一起提供REST请求的示例

func main(){
lis,err:=net.Listen(“tcp”,“6789”)
如果错误!=零{
log.Fatalf(“未能侦听:%v”,错误)
}
//在这里,我们注册并在端口6789上侦听HTTP服务器
//请注意,我们使用gofunc执行此操作,以便可以执行此主函数的其余部分-这可能并不理想
http.HandleFunc(“/event”,Handle)
转到http.service(lis,无)
//现在我们建立了GRPC
grpcServer:=grpc.NewServer()
//这是在proto文件中定义的GRPC服务,然后使用proto生成
pipelineServer:=服务器{}
pipeline.RegisterPipelinesServer(grpcServer,pipelineServer)
如果错误:=grpcServer.service(lis);错误!=nil{
log.Fatalf(“服务失败:%s”,错误)
}
}
func句柄(响应http.ResponseWriter,请求*http.request){
log.Infof(“处理”)
}

通过以上操作,将
POST
发送到
localhost:6789/event
将导致发出
处理日志行。

您是否在寻找这样的内容:?这里是实现它的正确方法啊,但这两台服务器的正常关闭似乎是不可能的,因为http服务器和grpc服务器的关闭过程都关闭了侦听器。这会导致第二个关闭服务器失败,因为侦听器过早关闭。