AWS API 网关通过 Postman 向方法测试返回不同的状态
AWS API Gateway returning different status via Postman to Method Test
我将 AWS Lambda 集成到 API 网关中。 lambda 是当前的,只是返回一个错误:
exports.handler = (event, context, callback) => {
context.fail(JSON.stringify({
status: 500,
errors: 'This is definitely the same endpoint.'
}));
};
我在 API 网关的方法响应中添加了 HTTP 状态 500 响应,并且我使用正则表达式 *"status":500.* 将集成响应映射到 500 响应。
当我使用 AWS 中的方法测试功能对此进行测试时,我得到了我期望的 500 响应:
但是当使用 Postman 向端点发送命令时,我得到 200 状态:
怎么会这样?方法测试似乎表明我的集成响应和方法响应设置是正确的,并且我的正则表达式设置正确,但是我在 API 网关和世界其他地方之间缺少什么会产生这种不同的结果?
您是否已经偶然发现了 Handle Custom Lambda Errors in API Gateway 指南?
建议的格式是:
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
所以你基本上需要return这个JSON结构。我用 AWS serverless express library(第 100-105 行)检查了这一点 - 我们使用它 - 它正在 returning 这个结构。
主要的挑战是,向客户端发送 HTTP 响应是 API 网关的任务,为此,您必须 return 来自 JSON 的有效响应API 网关理解的格式的 lambda。 lambda 的执行状态也将是 200(因为它有效 A-Okay)但是 API 网关会将您的响应转换为 500。这也是为什么您需要这个 double/triple JSON编码(JSON-as-string in JSON-attributes)。
您是否尝试过部署 API?也许重新部署可以解决问题。
我将 AWS Lambda 集成到 API 网关中。 lambda 是当前的,只是返回一个错误:
exports.handler = (event, context, callback) => {
context.fail(JSON.stringify({
status: 500,
errors: 'This is definitely the same endpoint.'
}));
};
我在 API 网关的方法响应中添加了 HTTP 状态 500 响应,并且我使用正则表达式 *"status":500.* 将集成响应映射到 500 响应。
当我使用 AWS 中的方法测试功能对此进行测试时,我得到了我期望的 500 响应:
但是当使用 Postman 向端点发送命令时,我得到 200 状态:
怎么会这样?方法测试似乎表明我的集成响应和方法响应设置是正确的,并且我的正则表达式设置正确,但是我在 API 网关和世界其他地方之间缺少什么会产生这种不同的结果?
您是否已经偶然发现了 Handle Custom Lambda Errors in API Gateway 指南?
建议的格式是:
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
所以你基本上需要return这个JSON结构。我用 AWS serverless express library(第 100-105 行)检查了这一点 - 我们使用它 - 它正在 returning 这个结构。
主要的挑战是,向客户端发送 HTTP 响应是 API 网关的任务,为此,您必须 return 来自 JSON 的有效响应API 网关理解的格式的 lambda。 lambda 的执行状态也将是 200(因为它有效 A-Okay)但是 API 网关会将您的响应转换为 500。这也是为什么您需要这个 double/triple JSON编码(JSON-as-string in JSON-attributes)。
您是否尝试过部署 API?也许重新部署可以解决问题。