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

Ron*_*Ron 6 amazon-dynamodb aws-api-gateway

我有一个包含几个字段的 Dynamodb 表 - my_id 是主键。在 API 网关中,我设置了一个带有参数的方法的响应{my_id}。

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

然后我有一个集成响应映射模板,可以按照我想要的方式清理返回的项目。

这一切都很完美。

我无法弄清楚如何做的是,如果传入的参数与表中的任何内容都不匹配,我该如何让它从 200 状态变为 404 状态?

据我所知,当传入的参数与任何内容不匹配时,它不会导致错误,它只是不返回任何内容。

似乎我需要更改集成响应上的映射模板以首先检查参数是否为空,然后以某种方式告诉它更改响应状态。

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

Shi*_*mar 8

您可以使用映射模板来转换从 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
Run Code Online (Sandbox Code Playgroud)


Abh*_*aja 2

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