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?也许重新部署可以解决问题。