是否有一种方法使用MUX路由来选择处理程序,而无需使用HTTP Listenserve for Golang



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

相关内容

最新更新