AWS API Gateway通过邮递员返回不同的状态以进行方法测试

时间:2019-06-11 07:29:32

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

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

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

我已在API网关的方法响应中添加了HTTP状态500响应,并已使用regex *“ status”:500. *将集成响应映射到500响应。

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

AWS Method Test Response

但是当使用Postman向终端发送命令时,我的状态为200:

Postman response

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

建议的格式为:

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

因此,您基本上需要返回此JSON结构。我使用AWS serverless express library(第100-105行)进行了检查-我们使用了它-并且返回了此结构。

主要挑战在于,将HTTP响应发送到客户端是API网关的任务,而要这样做,您必须以API网关无法理解的格式从lambda返回有效的JSON响应。 lambda的执行状态也将为200(因为它可以正常工作),但是API网关会将您的响应转换为500。这也是为什么您要使用这种双重/三重JSON编码(JSON中的JSON-as-string)的原因-属性)。