AWS API Gateway - 如果查询未返回任何内容,则更改为404

时间:2016-06-14 05:37:57

标签: amazon-dynamodb aws-api-gateway

我有一个带有几个字段的Dynamodb表 - my_id是PrimaryKey。在API网关中,我使用一个接受参数sendFile的方法设置响应。

然后我有一个Integration Request映射模板,它接受传入的参数并查询表以返回匹配的所有字段。

然后我有一个Integration响应映射模板,它以我想要的方式清理返回的项目。

这一切都很完美。

我无法弄明白该怎么做的是,如果传入的参数与表中的任何内容都不匹配,如何让它从200状态更改为404?

从传递的参数不匹配的东西我可以看出它不会导致错误,它只是不返回任何东西。

似乎我需要更改Integration响应上的映射模板,首先检查params是否为空,然后告诉它更改响应状态。

我可以使用Lambda找到有关此类事情的信息,但我没有使用Lambda - 只是Dynamodb表和API网关。

2 个答案:

答案 0 :(得分:2)

Api网关目前支持使用集成响应的状态代码映射状态代码(此处为dynamodb响应代码)。唯一的解决方法是使用lambda函数,该函数输出可以使用错误正则表达式http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-method-settings-execution-console.html映射的不同错误消息。

答案 1 :(得分:0)

您可以使用映射模板转换从DDB获得的响应并覆盖响应代码。您可以在链接https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html

中获取更多详细信息

如果您正在使用云形成,则可以使用下面的代码段

IntegrationResponses:
  - StatusCode: "200"
    ResponseTemplates:
        application/json: |
          {
            "payload" : {
              }
            },
          }
IntegrationResponses:
  - StatusCode: "200"
    ResponseTemplates:
       application/json: |
                #set($inputRoot = $input.path('$'))
                #if($inputRoot.toString().contains("Item"))
                $input.json("$")
                #set($context.responseOverride.status = 200)
                #else
                #set($context.responseOverride.status = 404)
                #end