如何在AWS API Gateway中获取URL路径参数{name}?
问题描述
我正在使用AWS API Gateway,需要接收URL路径中的{name}参数并返回Hello {name},但未能实现预期效果。我的API地址为https://xxxxxx.execute-api.eu-west-1.amazonaws.com/dev/John,当前使用的Python Lambda代码如下,期望输出为返回Hello John,请问哪里出错了?如何从URL中获取{name}参数?
当前Lambda代码:
def lambda_handler(event, context): name = event["requestContext"]["resourcePath"] response = "Hello " + name return { 'statusCode': 200, 'body': response }
期望输出:
{ "statusCode": 200, "body": "Hello John" }
错误原因
你当前代码从event["requestContext"]["resourcePath"]取值,这个字段返回的是API Gateway中定义的资源路径模板(例如/dev/{name}),而非实际请求URL中的参数值,因此无法获取到John。
解决步骤
1. 正确配置API Gateway路径参数
- 登录API Gateway控制台,找到目标API的资源层级(你的URL结构是
/dev/{name},因此需要在/dev资源下创建子资源/{name}) - 在子资源的配置中,将路径参数设为
{name},确保API Gateway能识别URL中的动态参数 - 若使用Lambda代理集成(推荐方式),无需额外配置映射;若使用非代理集成,需在「集成请求」中添加映射模板(Content-Type设为
application/json),模板内容如下:{ "name": "$input.params('name')" }
2. 修改Lambda代码获取参数
根据集成方式选择对应代码:
方式1:Lambda代理集成(推荐)
代理集成下,路径参数会自动封装到event["pathParameters"]中,修改代码:
def lambda_handler(event, context): # 用get方法避免参数不存在时报错,默认值设为Guest name = event.get("pathParameters", {}).get("name", "Guest") response = f"Hello {name}" return { 'statusCode': 200, 'body': response }
方式2:非代理集成
若使用自定义映射模板,直接从event中读取配置好的参数:
def lambda_handler(event, context): name = event.get("name", "Guest") response = f"Hello {name}" return { 'statusCode': 200, 'body': response }
验证
重新部署API Gateway后,请求https://xxxxxx.execute-api.eu-west-1.amazonaws.com/dev/John,即可得到预期的输出结果。
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

