Amazon API Gateway HTTP API:go 中 lambda 函数的自定义类型

Amazon API Gateway HTTP API: Custom types in lambda functions in go

我对如何使用 golang 将自定义类型传递到我的 Lambda 函数并坐在 HttpApi 后面有点困惑。

考虑以下 go lambda 处理程序,它几乎是 documentation.

示例的副本

type MyRequestType struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

type MyResponseType struct {
    Message string `json:"message"`
}

func handler(request MyRequestType) (MyResponseType, error) {
    log.Printf("received request: %v", request)
    return MyResponseType{Message: fmt.Sprintf("Hello %s, you are %d years old!", request.Name, request.Age)}, nil
}

func main() {
    lambda.Start(handler)
}

生成的消息始终如下所示。

{
    "message": "Hello , you are 0 years old!"
}

我觉得这在 Amazon API Gateway HTTP API 中是不可能的。 但我也没有找到任何文件指出,这是不可能的。所以我真的想知道,如果我做错了什么?

文档还说明了有关有效签名的内容:

例如func (context.Context, TIn) (TOut, error)

如果我使用 HTTP APIPayload format version 2:

context.Context 是普通的 golang context 还是特殊的东西? 我正在考虑 events.APIGatewayV2HTTPRequestContext 或其他人。

TInTOut => events.APIGatewayV2HTTPRequestevents.APIGatewayV2HTTPResponse 的正确类型是什么?

Is the context.Context the normal golang context

是的。

但是您可以使用 lambdacontext.FromContext 获取 Lambda 上下文,其中包含额外的特定于 lambda 的元数据。

What would be the right type of TIn and TOut

这取决于谁调用了 Lambda。当 Lambda 被另一个 AWS 服务调用时,包括 API 网关,所谓的 TInTOut 是来自 lambda event 包的类型。引用自包装介绍:

This package provides input types for Lambda functions that process AWS events.

如果是 API 网关,则为 events.APIGatewayProxyRequest and Response, or presumably for the Payload format version 2 the events.APIGatewayV2HTTPRequestResponse — 它们是在 v1.16.0 中添加的。

github 存储库 README

中的更多文档(但不多)