You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在AWS API Gateway中为错误响应配置HTTP状态码——解决Postman中请求无论成败均返回200的问题

解决AWS API Gateway错误响应状态码的问题

首先,咱们先搞清楚为啥你现在不管请求成功失败都拿到200——这是因为API Gateway默认会把后端返回的所有响应都封装成200状态码返回给客户端,哪怕后端已经返回了错误信息。要让失败时返回对应状态码,你需要配置**方法响应(Method Responses)集成响应(Integration Responses)**来映射错误场景。

步骤1:定义方法响应(Method Responses)

首先你得告诉API Gateway,你的方法支持哪些错误状态码(比如400、500这些):

  • 进入你的API Gateway控制台,找到对应的API和目标方法(比如POST/GET)
  • 切换到Method Response标签页
  • 点击Add Response,输入你想要返回的错误状态码(比如400),完成后保存
  • 重复这个步骤添加其他需要的错误码(比如500

步骤2:配置集成响应(Integration Responses)

这一步是把后端返回的失败标识(比如你返回的Status: "Failure")映射到刚才定义的HTTP状态码:

  • 切换到Integration Response标签页
  • 点击Add Integration Response,在匹配规则里(Lambda后端用Lambda Error Regex,HTTP后端用HTTP Status Regex),写入能匹配你失败响应的正则表达式,比如针对你给出的格式,可以用"Status":\s*"Failure"来精准命中失败场景
  • 选择刚才在Method Response里创建的对应错误状态码(比如400
  • 配置响应模板确保返回内容符合你的需求:
    • 展开Mapping Templates,点击Add mapping template,输入application/json
    • 勾选Never modify integration response,这样就能直接返回后端的原始失败响应JSON;如果需要调整格式,可以用$input.path('$')直接引用原始响应内容

针对你给出的失败响应格式的补充

因为你的失败响应里已经明确包含Status: "Failure"字段,所以配置正则匹配时一定要确保能精准捕获这个特征。如果后端是Lambda函数,不管是函数抛出的错误还是主动返回的JSON里包含该字段,API Gateway都能识别并映射到指定状态码。

测试验证

配置完成后必须部署你的API(这一步很容易忘,不部署的话配置不会生效),之后再用Postman调用:

  • 请求失败时,API Gateway会返回你配置的错误状态码(比如400),同时返回你定义的失败响应JSON
  • 请求成功时仍会返回200和对应的成功响应

另外,如果你用的是Lambda代理集成,配置会更简单:只需要让Lambda函数直接返回包含statusCode字段的响应对象,示例如下:

{
  "statusCode": 400,
  "body": "{\"ResponseHeader\": { \"ResponseId\": \"c4ddf534-4634-45d8-af1a-bad89ae63066\", \"RefRequestId\": \"dd2338e3-11ab-42cc-9c5a-4d88babbab91\", \"Status\": \"Failure\", \"Message\": \"Response Failed\", \"ResponseContext\": { \"ResponseTime\": {} } }}"
}

这种情况下,API Gateway会直接使用Lambda返回的statusCode作为HTTP响应码,无需额外配置方法响应和集成响应。


内容的提问来源于stack exchange,提问作者Srinath reddy

火山引擎 最新活动