AWS Lambda与API Gateway集成:如何获取API名称及HTTP请求类型
解答:Lambda通过API Gateway触发时获取API信息与请求详情
嘿,这个问题我太熟了!完全不用手动在请求体里传API名称——API Gateway会自动把这些关键信息打包进Lambda的event参数里,你直接读取就行,不需要额外配置。下面给你拆解怎么拿到你要的这些数据:
1. 获取HTTP请求方法(GET/POST等)
请求方法直接存在event的requestContext.http.method字段里,比如:
def test(event, context): # 获取HTTP方法 http_method = event['requestContext']['http']['method'] print(f"当前请求方法:{http_method}") # 后续逻辑...
2. 获取当前调用的API相关信息
API Gateway会把API的路径、ID等信息都塞进event里,常用的字段有:
event['rawPath']:完整的请求路径(比如/app/api/getInfo),这个足够区分不同的API端点event['requestContext']['apiId']:你在API Gateway里创建的API的唯一ID- 如果需要自定义的API名称(比如你给API取的别名),可以在API Gateway的集成请求里添加自定义头部,或者用阶段变量,不过大多数场景下用路径就足够区分了
举个例子:
def test(event, context): # 获取请求路径 api_path = event['rawPath'] print(f"当前调用的API路径:{api_path}") # 获取API ID api_id = event['requestContext']['apiId'] print(f"API Gateway的API ID:{api_id}") # 后续逻辑...
3. 获取请求参数
GET请求的查询参数
像你例子里的key=foobar这种查询参数,存在event['queryStringParameters']里,直接读取即可:
def test(event, context): # 获取查询参数 query_params = event.get('queryStringParameters', {}) key_value = query_params.get('key') print(f"查询参数key的值:{key_value}") # 后续逻辑...
POST请求的请求体
如果是POST的JSON请求体,会存在event['body']里,不过需要先解析成字典:
import json def test(event, context): # 解析POST请求体 body = json.loads(event.get('body', '{}')) # 读取body里的参数 # 后续逻辑...
完整示例代码
把上面的内容整合起来,一个完整的Lambda函数示例:
import json def test(event, context): # 获取HTTP方法 http_method = event['requestContext']['http']['method'] # 获取API路径 api_path = event['rawPath'] # 获取查询参数 query_params = event.get('queryStringParameters', {}) key_value = query_params.get('key') # 构造响应 response = { "statusCode": 200, "body": json.dumps({ "http_method": http_method, "api_path": api_path, "key_parameter": key_value }) } return response
这样你就能轻松拿到所有需要的信息啦,完全不用额外传参~
内容的提问来源于stack exchange,提问作者Ludo
相关产品推荐
相关产品推荐

