AWS API 网关,Python Lambda 和 HTTP 状态

AWS API Gateway, Python Lambda and HTTP status

我正在努力了解如何使用 AWS API 网关和 Lambda 函数 (python) 作为集成类型来设置正确的 http 状态代码和错误消息。

我正在处理一个简单的示例,这里是详细信息:

Lambda 函数

def lambda_handler(event, context):

    return_json = {}
    if event["request-number"] == "":
        raise Exception("Error request-number can't be empty")
    elif event["request-number"] == "3":
        raise Exception("Value not accepted")
    else:
        return_json = {"service-activated": "TRUE"}

    return return_json

API /资源测试 POST

这与上面的 lambda 集成在一起。

目标:return HTTP 400 和 body 消息 错误 request-number 不能为空 当 request-number = "".

实施

  1. 我创建了一个新方法响应 400
  2. 在 lambda 错误正则表达式中,我映射了 Error.* 以便捕获该字符串
  3. 在 body 映射模板中:我创建了一个 content-type 作为 application/json 和我使用的模板(之前有一个标签符号设置,但这搞砸了这个页面的格式,所以我省略了它):

    set($inputRoot = $input.path('$')) { "message" : $input.json('$.errorMessage') }

  4. 我已经检查过在方法响应中有 http 状态 400(我有)

测试 通过 AWS API 网关控制台,我测试了 HTTP 400,并且 body 中的消息 错误 request-number 不能为空 。很好,我实现了我想要的:

我决定也通过 Postman 和 Chrome 插件 Restlet Client 进行测试,我得到的是 http 状态 200 和错误消息格式不正确:

现在,这很奇怪:从 AWS API 控制台一切都很好,从外部服务没有任何工作如预期的那样。

有没有人遇到过类似的事情?

谢谢!

您是否重新部署了 API?