2

我正在努力了解如何使用 AWS API Gateway 和 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 集成。

目标: 当 request-number = "" 时返回 HTTP 400 和带有消息的正文Error request-number can't be empty 。

实施

  1. 我创建了一个新方法响应 400
  2. 在 lambda 错误正则表达式中,我映射了 Error.* 以便捕获该字符串
  3. 在正文映射模板中:我创建了一个内容类型为 application/json 并作为我使用过的模板(在设置之前有一个标签符号,但这会破坏此页面的格式,所以我省略了它):

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

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

通过 AWS API Gateway 控制台进行测试 ,我已经测试了 HTTP 400 并且正文中的消息Error request-number can't be empty。很好,我实现了我想要的:

在此处输入图像描述

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

在此处输入图像描述

现在,这很奇怪:从 AWS API 控制台来看,一切都很好,从外部服务来看,一切都没有按预期工作。

有没有人不得不处理类似的事情?

谢谢!

4

1 回答 1

1

您是否重新部署了 API?

于 2017-11-07T17:16:13.647 回答