AWS API Gateway HTTP API 如何传递字符串查询参数?
AWS API Gateway HTTP API how to pass string query params?
所以我正在制作一个应用程序并需要 AWS API 网关。我想使用 HTTP API 而不是 REST API。我的代码看起来像这样
package main
import (
"database/sql"
"fmt"
"strings"
"github.com/aws/aws-lambda-go/lambda"
_ "github.com/lib/pq"
)
here I make a connection to the database
func fetch(inte string, input string) string {
if err != nil {
panic(err)
}
switch inte {
case "00":
{
res = append(res, response)
}
switch len(res) {
case 0:
return "401"
}
case "01":
}
switch len(res) {
case 0:
return "402"
}
}
return "404"
}
type LambdaEvent struct {
Req string `json:"req"`
Num string `json:"num"`
}
type LambdaResponse struct {
Res string `json:"res"`
}
func LambdaHandler(event LambdaEvent) (LambdaResponse, error) {
res := fetch(event.Num, event.Req)
return LambdaResponse{
Res: res,
}, nil
}
func main() {
lambda.Start(LambdaHandler)
}
如您所见,这不是完整的代码。我连接到数据库并处理请求字符串查询。所以我对 http api 进行了同样的尝试,但它只给了我 404,这意味着 http api 没有将查询字符串传递给 lambda 那么我如何让我的 api 通过数据到 lambda。 Rest api 工作 HTTP 不工作。
感谢您的帮助。
如果您使用无服务器框架部署 lambdas 和 api-gateway,您可以这样做:
hello:
handler: src/hello.handler
name: hello
events:
- http:
path: car/{id}/color/{color}
method: get
我不熟悉 APIGW 的无服务器框架,但 APIGW 控制台内置了操作 QueryString 参数的功能。只需登录 AWS 并搜索 APIGateway。从左侧菜单编辑 HTTP API 和 select Integrations
。 Select 映射到您的 Lambda 函数的集成并编辑右侧的 Parameter Mappings
假设您打算使用 Lambda Proxy Integration in API Gateway,这里是访问查询参数需要做的更改。
- import
github.com/aws/aws-lambda-go/events
(这有所有相关的structs
)
- 将 lambda 处理程序更改为
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
- 现在您可以在
request.QueryStringParameters
以 Map 的形式访问查询参数并执行您的选择逻辑
- 当您 return 对 API 网关的响应时,请确保您遵循
events.APIGatewayProxyResponse
结构,即至少 return 状态代码以及可选的 body, headers等
- API 网关无需 changes/config 即可通过 Lambda 代理集成传递查询参数
您可以使用自己的 structs
进行请求和响应,但它们需要使用 events.APIGatewayProxyRequest
和 events.APIGatewayProxyResponse
中定义的适当键。
例如在 LambdaEvent
结构中添加以下内容以访问查询字符串参数。
QueryStringParameters map[string]string `json:"queryStringParameters"`
如果您刚开始使用 AWS Lambda,请查看 AWS SAM 让事情变得简单。
所以我正在制作一个应用程序并需要 AWS API 网关。我想使用 HTTP API 而不是 REST API。我的代码看起来像这样
package main
import (
"database/sql"
"fmt"
"strings"
"github.com/aws/aws-lambda-go/lambda"
_ "github.com/lib/pq"
)
here I make a connection to the database
func fetch(inte string, input string) string {
if err != nil {
panic(err)
}
switch inte {
case "00":
{
res = append(res, response)
}
switch len(res) {
case 0:
return "401"
}
case "01":
}
switch len(res) {
case 0:
return "402"
}
}
return "404"
}
type LambdaEvent struct {
Req string `json:"req"`
Num string `json:"num"`
}
type LambdaResponse struct {
Res string `json:"res"`
}
func LambdaHandler(event LambdaEvent) (LambdaResponse, error) {
res := fetch(event.Num, event.Req)
return LambdaResponse{
Res: res,
}, nil
}
func main() {
lambda.Start(LambdaHandler)
}
如您所见,这不是完整的代码。我连接到数据库并处理请求字符串查询。所以我对 http api 进行了同样的尝试,但它只给了我 404,这意味着 http api 没有将查询字符串传递给 lambda 那么我如何让我的 api 通过数据到 lambda。 Rest api 工作 HTTP 不工作。 感谢您的帮助。
如果您使用无服务器框架部署 lambdas 和 api-gateway,您可以这样做:
hello:
handler: src/hello.handler
name: hello
events:
- http:
path: car/{id}/color/{color}
method: get
我不熟悉 APIGW 的无服务器框架,但 APIGW 控制台内置了操作 QueryString 参数的功能。只需登录 AWS 并搜索 APIGateway。从左侧菜单编辑 HTTP API 和 select Integrations
。 Select 映射到您的 Lambda 函数的集成并编辑右侧的 Parameter Mappings
假设您打算使用 Lambda Proxy Integration in API Gateway,这里是访问查询参数需要做的更改。
- import
github.com/aws/aws-lambda-go/events
(这有所有相关的structs
) - 将 lambda 处理程序更改为
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
- 现在您可以在
request.QueryStringParameters
以 Map 的形式访问查询参数并执行您的选择逻辑 - 当您 return 对 API 网关的响应时,请确保您遵循
events.APIGatewayProxyResponse
结构,即至少 return 状态代码以及可选的 body, headers等 - API 网关无需 changes/config 即可通过 Lambda 代理集成传递查询参数
您可以使用自己的 structs
进行请求和响应,但它们需要使用 events.APIGatewayProxyRequest
和 events.APIGatewayProxyResponse
中定义的适当键。
例如在 LambdaEvent
结构中添加以下内容以访问查询字符串参数。
QueryStringParameters map[string]string `json:"queryStringParameters"`
如果您刚开始使用 AWS Lambda,请查看 AWS SAM 让事情变得简单。