从AWS API Gateway请求验证器获取详细的错误消息 [英] Get detailed error messages from AWS API Gateway Request Validator
问题描述
I have an API Gateway created using Swagger 2.0 definitions with API Gateway extensions.
我取代了默认的API网关响应,例如:
I overrode the default API Gateway responses, for instance:
x-amazon-apigateway-gateway-responses:
BAD_REQUEST_BODY:
statusCode: 400
responseTemplates:
application/json: |
{
"error": {
"code": 400,
"stage": "$context.stage",
"request": "$context.requestId",
"message": "$context.error.message"
}
}
The $context
in the above payload comes from API Gateway variables.
我的API中的示例资源/方法如下(总是LAMBDA_PROXY
集成):
A sample resource/method in my API looks like this (always LAMBDA_PROXY
integrations):
paths:
/test:
post:
parameters:
- in: body
name: Test
required: true
schema:
$ref: "#/definitions/Test"
responses:
201:
description: Created
400:
description: Bad Request
401:
description: Unauthorized
403:
description: Forbidden
x-amazon-apigateway-integration:
uri: >-
arn:aws:apigateway:${region}:lambda:path/2015-03-31/functions/${lambda}/invocations
type: aws_proxy
httpMethod: POST
credentials: "${credentials}"
passthroughBehavior: never
具有相应的请求有效负载定义:
With the corresponding request payload definition:
definitions:
Test:
type: object
title: Test
required:
- date
properties:
date:
type: string
pattern: "^20[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$"
description: Date in YYYY-MM-DD Format
和请求验证器扩展名:
x-amazon-apigateway-request-validator: body
x-amazon-apigateway-request-validators:
body:
validateRequestBody: true
validateRequestParameters: false
问题
当我用丢失或无效的date
呼叫此端点时,我总是得到相同的响应:
Problem
When I call this endpoint with a missing or invalid date
, I always get the same response:
{
"error": {
"code": 400,
"stage": "latest",
"request": "6b7a64f5-e7f0-11e7-845b-f53ceb4cb049",
"message": "Invalid request body"
}
}
但是,当我通过不带date
属性的API网关控制台进行测试时:
However, when I test it through the API Gateway console without the date
property:
Request body does not match model schema for content type application/json: [
object has missing required properties (["date"])
]
且date
无效:
Request body does not match model schema for content type application/json: [
ECMA 262 regex "^20[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" does not match input string "2017/12/25"
]
问题
如何访问详细的错误消息,以便可以用比Invalid request body
更具描述性的消息来丰富我的错误响应?我怀疑这可能是可能的,也许使用
Question
How can I access the detailed error message so that I can enrich my error response with a more descriptive message than Invalid request body
? I suspect that this must be possible, perhaps using x-amazon-apigateway-gateway-responses
mapping, but so far I haven't been able to do it.
推荐答案
更新:
这现在可以通过网关响应来实现.使用以下模板( https://docs.aws.amazon.com/apigateway/latest/developerguide/supported-gateway-response-types.html )
This is now possible with gateway responses. Setup a gateway response BAD_REQUEST_BODY
[docs] with the below template (https://docs.aws.amazon.com/apigateway/latest/developerguide/supported-gateway-response-types.html)
{"message":$context.error.validationErrorString}
(API网关上的开发人员)
(Developer on API Gateway)
很遗憾,目前不支持此功能.我们正在积极致力于解决此问题,但在何时可以支持的情况下,我无法提供具体的时间表.
Unfortunately, this is not supported right now. We are actively working on fixing this issue, but I can't give you any specific timelines by when this could be supported.
这篇关于从AWS API Gateway请求验证器获取详细的错误消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!