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 API
和 Payload format version 2
:
context.Context
是普通的 golang context
还是特殊的东西?
我正在考虑 events.APIGatewayV2HTTPRequestContext
或其他人。
TIn
和 TOut
=> events.APIGatewayV2HTTPRequest
和 events.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 网关,所谓的 TIn
和 TOut
是来自 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.APIGatewayV2HTTPRequest
和 Response
— 它们是在 v1.16.0 中添加的。
github 存储库 README
中的更多文档(但不多)
我对如何使用 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 API
和 Payload format version 2
:
context.Context
是普通的 golang context
还是特殊的东西?
我正在考虑 events.APIGatewayV2HTTPRequestContext
或其他人。
TIn
和 TOut
=> events.APIGatewayV2HTTPRequest
和 events.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 网关,所谓的 TIn
和 TOut
是来自 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.APIGatewayV2HTTPRequest
和 Response
— 它们是在 v1.16.0 中添加的。
github 存储库 README
中的更多文档(但不多)