【问题标题】:Deploy API to Amazon API Gateway将 API 部署到 Amazon API Gateway
【发布时间】:2015-10-10 01:18:59
【问题描述】:

Amazon API Gateway 中,我创建了一个简单的 API,其中包含一个名为 demo 的资源和一个与之对应的 POST 方法:

现在,我希望我的端点接受 any Content-TypePOST 请求,所以不一定是 application/json,还有 plain/text。然后我想获取请求的 body 并将其包装在 JSON 对象中并将其发送到 Amazon Lambda 函数 ( Lambda 函数只能接受 JSON 对象作为参数)。

为此,我编辑了与我的方法相对应的集成请求,以使用自定义模板映射:

我使用了亚马逊文档中的参考资料,可以在这里找到:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

我的 Lambda 函数如下所示:

exports.handler = function(event, context) {
    context.succeed(event);
};

测试时,无论我发送什么,我都会得到预期的输出:

但是,当我部署时,转换不再起作用,它需要 JSON

  • 发送任何内容都会导致:

  • 发送 JSON 会产生这样的结果:

这个过程中是否有任何部分执行错误?部署时我错过了什么吗?对我来说,这看起来像是一个非常烦人的亚马逊错误,有人可以确认吗?

【问题讨论】:

  • “测试”按钮是否有效?
  • 是的,但重要的是要了解,在测试请求的内容类型时强制为 application/json。这将反过来匹配我的模板。
  • 而且不能删除需要的Content-Type或者替换成'*'
  • 好像不行。也许还有其他通配符?
  • 感谢这个写得很好的问题,它帮助我解决了我的问题

标签: amazon-web-services aws-lambda


【解决方案1】:

使用内容类型“application/json”。

https://gist.github.com/maruks/e036168263cd412146e6

【讨论】:

  • 您的解决方案很棒,而且绝对比我在文档中找到的要好。但是,这意味着我需要事先了解我可能收到的所有内容类型。有没有办法指定通配符内容类型之类的东西,即使没有设置内容类型(或不同的内容类型)也能捕获请求?
  • @Interfector 我相信它还不可能有一个默认/通配符处理程序。亚马逊尚未在其论坛上对this question 做出官方回应。
  • application/json 是默认的内容类型。如果请求中未指定 content-type,则应用程序/json 的映射模板将用于为 Lambda 创建事件。如果在请求中设置了内容类型,那么您似乎需要为每个可能的内容类型设置一个模板。
【解决方案2】:

您是否尝试在 curl 请求中设置 Accept 和 Content-Type 标头?下面我假设您正在发送“text/plain”并且可以在响应中接受 json

-H "Content-Type: text/plain" -H "Accept: application/json"

【讨论】:

  • 我刚刚试过了,它不起作用。接受部分是多余的,我只会接受扔给我的任何东西。我还尝试将 Content-Type 设置为 application/json 希望我错过了亚马逊的一些魔法。
猜你喜欢
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
相关资源
最近更新 更多