【问题标题】:Typescript for AWS HTTP API Gateway Lambda Handlers适用于 AWS HTTP API Gateway Lambda 处理程序的 Typescript
【发布时间】:2020-05-26 14:51:34
【问题描述】:

目前我使用以下内容为 RestApi 键入 lambda 函数:

import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {}

这不适用于新的 AWS Gateway HTTP API,其中可以使用 event.requestContext.http.method 获取 HTTP 方法。

我应该使用其他类型吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway aws-http-api


    【解决方案1】:

    我应该使用其他类型吗?

    我不这么认为。 这些类型可通过DefinitelyTyped 获得。 [1] 查看有关“aws-lambda”类型的一些问题,您会注意到 API Gateway 类型不经常更新。 [2]

    此外,API 网关的有效负载格式版本已更改,请参阅 [3]:

    有效负载格式版本指定 API Gateway 发送到 Lambda 集成的数据格式,以及 API Gateway 如何解释来自 Lambda 的响应。如果您未指定有效负载格式版本,AWS 管理控制台默认使用最新版本。如果您使用 AWS CLI、AWS CloudFormation 或开发工具包创建 Lambda 集成,则必须指定 payloadFormatVersion。支持的值为 1.0 和 2.0。

    我猜你使用的是最新版本 2.0。 2.0 版提供 HTTP 方法作为属性 requestContext.http.method

    1.0 版提供 HTTP 方法作为属性 requestContext.httpMethod

    解决方案

    您可以 1.) 为新的有效负载格式版本编写类型,并通过 PR 将其提交给包“@types/aws-lambda”的 DeliveriesTyped 或 2.) 将您的 API 网关设置为使用 1.0 版。

    老实说,我不知道 HTTP API 是否可以使用有效负载版本 1.0。也许 AWS 正在对新 API 强制执行最新版本,因为不需要支持旧格式。

    参考文献

    [1]https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/aws-lambda/trigger/api-gateway-proxy.d.ts
    [2]https://github.com/DefinitelyTyped/DefinitelyTyped/issues/38720#issuecomment-586051966
    [3]https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html

    【讨论】:

    【解决方案2】:

    接受的答案已过期。 aws-lambda 现在也导出APIGatewayProxyEventV2

    import { APIGatewayProxyEventV2 } from 'aws-lambda'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 2017-11-26
      • 2017-02-23
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多