【问题标题】:AWS API Gateway Multiple 2XX ResponsesAWS API Gateway 多个 2XX 响应
【发布时间】:2017-10-31 18:57:29
【问题描述】:

我们有一个通过 API Gateway 构建的 API 端点,它可以有两个可能的成功响应:如果返回所有请求的数据,则返回 200 OK,如果数据已分页并且需要额外请求来获取,则返回 206 Partial Content所有数据。

我在https://aws.amazon.com/blogs/compute/amazon-api-gateway-mapping-improvements/ 发现亚马逊现在允许定义多个 2XX 响应,但我不能将这两个响应都归因于集成响应配置中的成功。现在我们将 200 设置为默认值,但似乎我们必须为 206 映射指定 Lambda 错误正则表达式。

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

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

【问题讨论】:

  • 这似乎是对206 Partial Content的滥用。 HTTP 状态 206 用于响应 Range 请求。 tools.ietf.org/html/rfc7233#page-10
  • 除了 206,我发现避免使用旧的 API 网关集成并只使用 Lambda-Proxy 更容易。这样您就可以避免所有这些糟糕的映射内容,并且可以使用常规 HTTP 库来管理请求-响应生命周期。无耻塞:github.com/dougmoscrop/serverless-http

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


【解决方案1】:

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

是的,没错。古怪,错误,但它有效。

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2016-04-16
      • 2019-10-25
      • 2016-12-15
      • 2017-08-08
      • 2018-08-12
      相关资源
      最近更新 更多