【问题标题】:AWS API Gateway returning different status via Postman to Method TestAWS API Gateway 通过 Postman 返回不同的状态到方法测试
【发布时间】:2019-10-25 13:48:29
【问题描述】:

我有一个集成到 API Gateway 中的 AWS Lambda。 lambda 是当前的,只是返回一个错误:

exports.handler = (event, context, callback) => {
  context.fail(JSON.stringify({
    status: 500,
    errors: 'This is definitely the same endpoint.'
  }));
};

我在 API Gateway 的方法响应中添加了 HTTP 状态 500 响应,并且我已经使用正则表达式 *"status":500.* 将集成响应映射到 500 响应。

当我使用 AWS 中的方法测试功能对此进行测试时,我得到了预期的 500 响应:

但是当使用 Postman 向端点发送命令时,我得到 200 状态:

这怎么可能?方法测试似乎表明我的集成响应和方法响应设置是正确的,并且我的正则表达式设置正确,但是我在 API 网关和世界其他地方之间缺少什么会产生这种不同的结果?

【问题讨论】:

    标签: amazon-web-services aws-lambda http-status-codes api-gateway


    【解决方案1】:

    您是否尝试过部署 API?也许重新部署可能会解决问题。

    【讨论】:

    • 是的,就是这样。
    • 在通过 CDK 创建 API 后,这对我也有帮助
    【解决方案2】:

    您是否已经偶然发现了Handle Custom Lambda Errors in API Gateway 指南?

    建议的格式是:

    {
       "isBase64Encoded" : "boolean",
       "statusCode": "number",
       "headers": { ... },
       "body": "JSON string"
    }
    

    所以你基本上需要返回这个 JSON 结构。我用 AWS serverless express library(第 100-105 行)检查了这个 - 我们使用它 - 它正在返回这个结构。

    主要的挑战是,向客户端发送 HTTP 响应是 API 网关的任务,为此,您必须从 lambda 以 API 网关可以理解的格式返回有效的 JSON 响应。 lambda 的执行状态也将是 200(因为它可以正常工作)但 API 网关会将您的响应转换为 500。这也是您需要这种双/三 JSON 编码的原因(JSON-as-string in JSON -属性)。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2016-01-27
      • 2018-04-19
      • 2020-07-07
      • 2018-04-23
      • 2021-07-29
      • 1970-01-01
      • 2017-12-25
      • 2016-02-10
      相关资源
      最近更新 更多