AWS API Gateway多个2XX响应

时间:2017-10-31 18:57:29

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

我们正在通过API网关构建一个API端点,它可以有两个可能的成功响应:如果返回所有请求的数据则为200 OK;如果数据已分页且需要其他请求,则为206 Partial Content所有数据。

我在https://aws.amazon.com/blogs/compute/amazon-api-gateway-mapping-improvements/发现亚马逊现在允许定义多个2XX响应,但我无法将这两个响应归因于Integration Response配置中的成功。现在我们将200设置为默认设置,但似乎我们必须为206映射指定Lambda Error Regex。

这是否基本上意味着我必须通过错误消息使206失败,然后使用正则表达式来确定是否正在发送该消息,然后基本上只是将其视为成功?或者我如何才能正确地返回200或206作为成功的回复?

AWS将在我们的服务器上点击的端点将正确返回200或206,但当AWS响应客户端时,它当前只发送200。

2 个答案:

答案 0 :(得分:0)

  

这是否基本上意味着我必须通过错误使206失败   消息,然后使用正则表达式来确定该消息是否正在   发送,然后基本上只是把它当作成功对待?

是的,这是正确的。古怪,错误,但它确实有效。

答案 1 :(得分:0)

API网关不提供发送多个成功2xx响应。以下是一些选项

  1. 使您的lambda或后端应用程序失败,并返回一些json响应。在集成响应中创建一个正则表达式,并将响应映射到特定的错误代码。正则表达式的匹配是在errorMessage字段上完成的,该字段仅在您从lambda抛出错误后才能获得。

  2. 使用响应覆盖。您可以创建一个匹配所有或某些响应的默认映射,然后在映射模板中将状态代码覆盖到要发送回的任何内容。

例如:-
Lambda返回

def handler(event, context):
   x = {
     "message": "partial"
   }
   return x

API网关集成响应

Lambda错误正则表达式:-
方法响应状态:200
默认映射:是

映射模板:

#set($inputRoot = $input.path('$'))
$input.json("$")
#if($inputRoot.toString().contains("partial"))
    #set($context.responseOverride.status = 206)
#end