0

所以我正在制作一个应用程序并需要 AWS API Gateway。我想使用 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 不工作。谢谢你的帮助。

4

3 回答 3

0

如果您使用无服务器框架部署 lambdas 和 api-gateway,您可以执行以下操作:

hello:
  handler: src/hello.handler
  name: hello
  events:
    - http:
        path: car/{id}/color/{color}
        method: get
于 2021-04-06T21:21:26.840 回答
0

我不熟悉 APIGW 的无服务器框架,但操作 QueryString 参数是内置在 APIGW 控制台中的。只需登录 AWS 并搜索 APIGateway。编辑您的 HTTP API 并Integrations从左侧的菜单中进行选择。选择映射到您的 Lambda 函数的集成并编辑Parameter Mappings右侧的

APIGateway 的屏幕截图显示了如何覆盖查询字符串参数。

于 2021-04-06T22:37:31.320 回答
0

假设您计划在 API Gateway 中使用 Lambda 代理集成,以下是访问查询参数需要进行的更改。

  • 进口github.com/aws/aws-lambda-go/events(这有所有相关的structs
  • 将 lambda 处理程序更改为func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
  • 现在您可以将查询参数作为 Map 访问request.QueryStringParameters并执行您的选择逻辑
  • 当您返回 API 网关的响应时,请确保您遵循该events.APIGatewayProxyResponse结构,即至少返回一个状态代码以及可选的正文、标题等。
  • API 网关无需更改/配置即可通过 Lambda 代理集成传递​​查询参数

您可以使用自己structs的请求和响应,但他们需要使用和中定义的适当events.APIGatewayProxyRequestevents.APIGatewayProxyResponse

例如,在结构中添加以下内容LambdaEvent以访问查询字符串参数。

QueryStringParameters map[string]string `json:"queryStringParameters"`

如果您开始使用 AWS Lambda,请查看AWS SAM以保持简单。

于 2021-04-07T00:41:18.390 回答