对于golang来说,有很多多路复用路由器。我找到的所有方法都假设我正在用go构建自己的HTTP服务器。但是,我希望使用aws apigateway作为外部层,并让它将方法、路径、查询参数转发到我与apex一起部署的lambda函数(对于aws lambda函数,请使用填充程序)。所有的API网关端点都将转发到一个lambda函数,这样就减少了需要挂接的内容,如权限等。
因此,我想使用很好的mux库来解析regex或path变量,但在Lambda中使用它们,并能够基于url路径调用正确的处理程序。
大多数多路复用路由器的用法如下:
router := NewRouter()
router.Add("GET", "/my_path/:id", MyHandler)其中,MyHandler是一种http.HandlerFunc
然后使用类似于http.ListenAndServe(port, router)的命令启动服务器
但是在AWS Lambda中没有要启动的服务器,我只想使用mux来找到我应该调用的处理程序。
发布于 2018-03-20 10:46:13
为此,我创建了一个lib。
其基本思想是将作为json对象的网关请求上下文转换为http.Request
发布于 2018-05-24 22:51:28
最常见的方法是使用apex/gateway,它是AWS Lambda上net/http的一个很小的替代品。这是通过使用相同的参数调用开始的。
gateway.ListenAndServe(port, router)下面是一个示例,展示了它的用法:
func main() {
http.HandleFunc("/", hello)
log.Fatal(gateway.ListenAndServe(":3000", nil))
}
func hello(w http.ResponseWriter, r *http.Request) {
// example retrieving values from the api gateway proxy request context.
requestContext, ok := gateway.RequestContext(r.Context())
if !ok || requestContext.Authorizer["sub"] == nil {
fmt.Fprint(w, "Hello World from Go")
return
}
userID := requestContext.Authorizer["sub"].(string)
fmt.Fprintf(w, "Hello %s from Go", userID)
}在chi路由器中使用它也是很常见的。
其他一些选项包括:
davyzhang/agw (在Davy的response)davidsbond/luxEtienneBruines/fasthttplambda中列出
https://stackoverflow.com/questions/47424899
复制相似问题