负载版本 1.0 和 2.0 之间有什么区别? 如何在 Amazon API Gateway 中映射 HTTP API 返回的状态代码?或如何在 HTTP API 中映射状态代码?
解决方法
您想要覆盖后端响应状态代码时,请使用 API Gateway 映射模板或正则表达式来映射状态代码。您可以在 HTTP API 的代理和非代理集成中执行此操作。
使用 HTTP API
与 REST API 相比,HTTP API 在设计上有所不同。HTTP API 由默认代理集成并返回相同的响应。与 REST API 不同,HTTP API 提供两个负载格式版本,与 Lambda 集成一起使用。对于 1.0 和 2.0 负载格式版本,有相应的 Lambda 函数响应格式。
使用负载格式版本 2.0 时,如果 Lambda 函数未在有效的 JSON 响应中明确传递状态代码,则 API Gateway 会认定:
- IsBase64Encoded 为 false
- statusCode 是 200
- content-type 为 application/json
- body 为来自 Lambda 函数的响应
在上述示例中,HTTP API 不返回任何错误,但会转发认定的状态代码 200。
使用负载格式版本 1.0 时,Lambda 集成必须返回以下格式的响应。API Gateway 不对此响应做出假设,而是返回 500 代码错误。
{
"isBase64Encoded": true|false,
"statusCode": httpStatusCode,
"headers": { "headername": "headervalue", ... },
"multiValueHeaders": { "headername": ["headervalue", "headervalue2", ...], ... },
"body": "..."
}
映射状态代码
要将状态代码映射为静态值(基于返回的后端响应键),请执行以下操作:
- 导航到 HTTP API 中配置的集成。
- 选择要修改的集成路由。选择管理集成。滚动到参数映射,然后选择创建参数映射。
- 将映射类型设置为响应(基于状态代码)。还要设置响应状态代码,因为与该状态代码匹配的集成响应必须要应用参数映射。
- 选择添加新映射。
- 在要修改的参数下,选择 statusCode。将修改类型设置为覆盖。
- 将值设置为静态值。
注意: 需要将此值发送给客户端。
- 选择创建。
相关信息
使用模型和映射模板
转换 API 请求和响应