Lambda函数关联REST API配置及参数传递问题咨询
问题解答
1. REST API触发器的特殊配置
- 必须勾选使用Lambda代理集成:在API Gateway创建GET/POST等方法时,集成类型选择Lambda函数,开启该选项后,API Gateway会将完整请求信息(查询参数、请求体等)封装进Lambda的
event对象,这是参数正确传递的核心前提。 - 权限确认:配置触发器时AWS通常会自动生成API Gateway调用Lambda的权限策略,若未自动生成,需手动为API Gateway服务主体添加
lambda:InvokeFunction权限。 - 部署API:完成资源和方法配置后,必须将API部署到指定阶段(如prod),否则无法通过外部URL访问。
2. 正确传递地址参数的URL格式及Lambda代码调整
情况1:GET请求(查询字符串传参)
URL格式示例:
https://{你的API ID}.execute-api.{区域}.amazonaws.com/{阶段名}/{资源路径}?address=1111+Morse+Ave+Sunnyvale%2C+CA+94089
Lambda中获取参数的代码需调整为:
# 增加参数存在性校验,避免KeyError if 'queryStringParameters' in event and event['queryStringParameters'] and 'address' in event['queryStringParameters']: address = event['queryStringParameters']['address'] else: return { 'statusCode': 400, 'body': json.dumps({'error': '缺少address参数'}) }
情况2:POST请求(JSON请求体传参)
请求Body需为JSON格式:
{"address": "1111 Morse Ave Sunnyvale, CA 94089"}
Lambda中获取参数的代码需调整为:
try: body = json.loads(event['body']) address = body['address'] except (KeyError, json.JSONDecodeError): return { 'statusCode': 400, 'body': json.dumps({'error': '请求体格式错误或缺少address参数'}) }
额外代码优化建议
- 不要直接拼接URL参数,改用
requests.get的params参数自动处理编码,避免特殊字符导致请求失败:
params = { 'address': address, 'benchmark': 'Public_AR_Census2020', 'vintage': 'Census2020_Census2020', 'layers': '10', 'format': 'json' } req = requests.get("https://geocoding.geo.census.gov/geocoder/geographies/onelineaddress", params=params)
- 当前代码返回的是
event,应改为返回地理编码API的响应内容,将return中的body替换为data或json.loads(data)。
内容的提问来源于stack exchange,提问作者LordOfDeadbush
相关产品推荐
相关产品推荐

