如何在lambda函数中传递和检索多个参数?

2024-05-29 02:46:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用python和dynamoDB的无服务器框架开发RESTAPI。我想知道如何在lambda函数中传递和检索参数。我在serverless.xml上的配置如下所示:

getNearestConvenios:
  handler: src/controllers/convenio_controller.get_nearest_convenios
  events:
    - http:
        path: convenios/nearest
        method: get
        cors: True
        request:
          template:
            application/json: '{ "lat" : "$input.params(''lat'')",  "long" : "$input.params(''long'')"}'

我试图检索如下参数:

def get_nearest_convenios(event, context):
  try:
    parameters = event['pathParameters']
    convenios = service.get_nearest_convenios(parameters['lat'], parameters['long'])
    return http.ok(convenios)
  except Exception as ex:
    logger.warn("WARNING: Request id: {0}, Error: {1}, Info: {2}".format(context.aws_request_id, type(ex), ex.args))
    return http.bad_request(str(ex))

我遵循了官方文件中提供的{a1},但直到现在我都没有成功。此外,在CloudWatch中显示以下错误:

    [WARNING]   2020-08-14T09:04:11.783Z    3c9222b2-4601-4460-ba7c-3cd89ba3b04b    WARNING: Request id: 3c9222b2-4601-4460-ba7c-3cd89ba3b04b, Error: <class 'TypeError'>, Info: ("'NoneType' object is not subscriptable",)

Tags: eventidhttpinput参数getrequestparams
1条回答
网友
1楼 · 发布于 2024-05-29 02:46:37

您尚未在lambda中指定任何集成类型,因此它将使用默认的lambda-proxy集成类型。在Lambda代理集成中,当客户端提交API请求时,API网关将原始请求原样传递给集成的Lambda函数。不能将映射模板与lambda-proxy集成使用。如果要转换请求或响应,可以选择不带代理的lambda集成

您正在使用HTTP GET。因此,可以将数据作为查询字符串或路径参数传递

  • 查询字符串:在url中传递数据,例如http://api.example.com/Books?id=1。查询字符串参数可以在lambda中作为event. queryStringParameters访问

  • 路径参数:您可以在无服务器模板中定义参数,如下所示。然后可以访问lambda中的路径参数,如event.pathParameters

    getNearestConvenios:
    handler: src/controllers/convenio_controller.get_nearest_convenios/{parameter}
    events:
      - http:
          path: convenios/nearest
          method: get
          cors: True
    

参考: Lambda Proxy Integration

相关问题 更多 >

    热门问题