我有一个Dynamodb表,它有几个字段——my_id是PrimaryKey。在API网关中,我使用接收参数{my_id}
的方法来设置响应。
然后我有一个IntegrationRequest映射模板,它接受传入的参数并查询表以返回所有匹配的字段。
然后我有一个Integration响应映射模板,它可以按照我想要的方式清理返回的项。
这一切都很完美。
我想不通的是,如果传入的参数与表中的任何内容都不匹配,我该如何将其从200状态更改为404状态?
根据我的判断,当传入的参数与任何内容都不匹配时,它不会导致错误,只是不会返回任何内容。
我似乎需要更改Integration响应上的映射模板,以首先检查params是否为空,然后以某种方式告诉它更改响应状态。
我可以从使用Lambda的人那里找到关于这类事情的信息,但我没有使用Lambda,只是使用Dynamodb表和API网关。
您可以使用映射模板来转换从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
Api gateway目前支持使用集成响应的状态码映射状态码(这里是generanddb响应码)。唯一的解决方法是使用lambda函数,该函数输出可以使用错误正则表达式映射的不同错误消息http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-method-settings-execution-console.html.