Golang有很多MUX路由器。我发现的所有这些都认为我正在GO中构建自己的HTTP服务器。但是,我想将AWS Apigateway用作外部图层,并将其转发到我使用Apex部署的LAMBDA函数的方法,路径,查询参数(请使用AWS lambda函数)。所有的API网关端点都将转发到一个lambda功能,以便更少可以连接的东西,例如权限等等。
因此,我想使用漂亮的Mux库来解除正则或路径变量的能力,但要在lambda内使用它们,并能够根据URL路径调用正确的处理程序。
大多数MUX路由器都具有这样的用法:
router := NewRouter()
router.Add("GET", "/my_path/:id", MyHandler)
其中 MyHandler
是一种http.handlerfunc
然后,服务器以 http.ListenAndServe(port, router)
但是在AWS lambda中,没有服务器可以启动,我只想使用MUX找到我应该打电话的处理程序。
我为此创建了一个lib。
基本思想是将json对象的apigateway请求上下文转换为http.request
最常见的方法是使用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
(在戴维的响应中列出) -
davidsbond/lux
-
EtienneBruines/fasthttplambda