如何获取API Gateway触发AWS Lambda的event结构并提取POST请求body
API Gateway触发AWS Lambda的Event参数结构说明
对接API Gateway代理集成的AWS Lambda收到的事件结构固定,与运行时版本无关,完全适配你使用的Ruby 2.7环境。
完整Event结构示例
{ "resource": "/quizzes", "path": "/quizzes", "httpMethod": "POST", "headers": { "Accept": "*/*", "Content-Type": "application/json", "Host": "xxx.execute-api.us-east-1.amazonaws.com", "User-Agent": "curl/7.64.1" }, "queryStringParameters": null, "pathParameters": null, "stageVariables": null, "requestContext": { "requestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "sourceIp": "192.168.1.1", "httpMethod": "POST", "stage": "prod" }, "body": "{\n \"quiz\":\n {\n \"first_name\": \"john\",\n \"last_name\": \"doe\",\n \"ssn\": \"1234\",\n \"address\":\n {\n \"line1\": \"4444 NW ANYSTREET AVE\",\n \"city\": \"anytown\",\n \"state\": \"FL\",\n \"zip_code\": \"33333\"\n },\n \"dob\":\n {\n \"day\": 25,\n \"month\": 12,\n \"year\": 2000\n }\n }\n}", "isBase64Encoded": false }
如果使用的是HTTP API v2版本的集成,事件结构会有少量差异,顶层会新增值为2.0的version字段,body字段位置、格式完全不变。
提取请求载荷的实现方法
你需要的POST请求完整载荷存放在body字段中,注意该字段默认是字符串格式,二进制请求场景下会被Base64编码,Ruby环境下的提取代码参考:
require 'json' require 'base64' def lambda_handler(event:, context:) # 处理Base64编码的请求体场景 raw_body = event['isBase64Encoded'] ? Base64.decode64(event['body']) : event['body'] # 将字符串格式的请求体解析为Ruby哈希对象 request_payload = JSON.parse(raw_body) # 直接获取你需要的quiz对象 quiz_info = request_payload['quiz'] # 后续业务逻辑 end
如果你的API Gateway配置为非代理集成,你可以在集成请求配置中自定义映射模板,自定义事件结构,默认代理集成场景下直接使用上述逻辑即可。
内容的提问来源于stack exchange,提问作者mr_muscle
相关产品推荐
相关产品推荐

