API网关 - 获取StatusCode

时间:2017-01-16 06:10:42

标签: amazon-web-services aws-lambda aws-api-gateway

这应该是一个如此简单的问题,我不明白为什么它没有经过我所有的搜索(也许它只是漫长的一天)。

我有一个API网关API设置,我正在Body Mapping Template为我的Integration Response添加400 *错误组:请参阅图片 -

enter image description here

我想得到的是当前响应的StatusCode(因为这是一个400 *组 - 例如401/403/404等)。

我最接近的是通过这个网站:AWS help documentation我认为我可以使用像$context.statusCode这样的东西 - 但没有运气。

我是疯了还是这不是经常需要的东西?

PS - 对正在调用的任何Lambda函数进行更改不是一种选择。

由于

2 个答案:

答案 0 :(得分:0)

如果您要从服务器发送错误代码,则可以轻松映射它们。

我做了类似的事情,但我用了不同的技巧。我曾经从服务器发送自己的错误实体和代码。

您必须将来自服务器的错误实体和错误代码映射到来自amazon服务器的响应。我会试着解释一下我的意思。 Api Gateway不会自动将来自您自己的服务器的响应发送到客户端。您必须映射这些响应。例如,将200映射为SUCESS和响应实体将是默认的,即来自服务器的任何内容。

现在,我们默认管理成功响应但是错误代码和错误实体呢。你必须手动映射它们。

有两种方法可以做到这一点,

一个是手动的,去你的api。创建错误实体或模型。为每个响应代码手动映射它们。

这个使用swaggger, 解决方案是导入错误实体的swagger规范。将响应模板添加到swagger规范中,让亚马逊完成自己的工作。

我可以通过招摇来帮助你。这取决于你如何在亚马逊上设置api。

访问此内容,让amazon扩展成为一种招摇, http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html#api-gateway-swagger-extensions-integration-response

答案 1 :(得分:0)

目前在API网关中没有专用于集成响应状态代码的映射模板变量。

我们肯定会将此添加为功能请求。

目前,您只能在响应模板中对状态代码值进行硬编码。您可能需要定义通用状态代码(即" 4XX")或为要捕获的每个状态代码定义集成响应。虽然这看起来很乏味,但可以在Swagger模板中相对容易地管理。

目前,查看集成响应状态代码的唯一方法是通过CloudWatch Logs。

谢谢, Ryan /亚马逊API网关