在 API Gateway 中测试基本请求验证
请选择以下任一主题,了解有关针对示例 API 测试基本请求验证的说明。
使用 API Gateway REST API 测试基本请求验证
要查看已部署的 API 的调用 URL,您可以从阶段中导出 API,同时确保其包含 Accept: application/json 或 Accept: application/yaml 标头:
GET /restapis/abcdef123/stages/testStage/exports/swagger?extensions=validators HTTP/1.1 Accept: application/json Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170306T234936Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20170306/us-east-1/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature={sig4_hash}
如果不想下载与请求验证相关的 OpenAPI 规范,您可以忽略 ?extensions=validators 查询参数。
使用 API Gateway REST API 调用测试请求验证
-
调用
GET /validation?q1=cat。GET /testStage/validation?q1=cat HTTP/1.1 Host: abcdef123.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json因为
q1所需的参数已设置并且非空,所以该请求通过验证。API Gateway 返回以下200 OK响应:[ { "id": 1, "type": "cat", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "cat", "price": 0.99 } ] -
调用
GET /validation。GET /testStage/validation HTTP/1.1 Host: abcdef123.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json因为
q1所需的参数未设置,所以该请求没有通过验证。API Gateway 返回以下400 Bad Request响应:{ "message": "Missing required request parameters: [q1]" } -
调用
GET /validation?q1=。GET /testStage/validation?q1= HTTP/1.1 Host: abcdef123.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json因为
q1所需的参数为空,所以该请求没有通过验证。API Gateway 返回与上一个示例相同的400 Bad Request响应。 -
调用
POST /validation。POST /testStage/validation HTTP/1.1 Host: abcdef123.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json h1: v1 { "name" : "Marco", "type" : "dog", "price" : 260 }因为
h1所需的标头参数已设置(且非空),且负载格式符合RequestDataModel需要的属性和关联的约束,所以该请求通过验证。API Gateway 返回以下成功的响应。{ "pet": { "name": "Marco", "type": "dog", "price": 260 }, "message": "success" } -
调用
POST /validation,但不指定h1标头或将其值为设置空。POST /testStage/validation HTTP/1.1 Host: abcdef123.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json { "name" : "Marco", "type" : "dog", "price" : 260 }因为
h1所需的标头参数缺失或设置为空,所以该请求没有通过验证。API Gateway 返回以下400 Bad Request响应:{ "message": "Missing required request parameters: [h1]" } -
调用
POST /validation,同时将负载的type属性设置为bird。POST /testStage/validation HTTP/1.1 Host: abcdef123.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json X-Amz-Date: 20170309T000215Z h1: v1 { "name" : "Molly", "type" : "bird", "price" : 269 }因为
type属性值不是["dog", "cat", "fish"]的枚举值,所以该请求没有通过验证。API Gateway 返回以下400 Bad Request响应:{ "message": "Invalid request body" }将
price设置为501违反了属性的约束条件。这会导致验证失败并返回相同的400 Bad Request响应。
使用 API Gateway 控制台测试基本请求验证
以下步骤介绍如何在 API Gateway 控制台中测试基本请求验证。
在 API Gateway 控制台中使用 TestInvoke 在方法上测试请求验证
登录 API Gateway 控制台时,请执行以下操作:
-
针对您已为其配置了请求验证程序映射的 API 选择 Resources (资源)。
-
选择一种您已使用指定请求验证程序为其启用了请求验证的方法。
-
在 Method Execution (方法执行) 下的客户端框中,选择 测试。
-
针对所需请求参数或适用正文尝试不同的值,然后选择测试查看响应。
当该方法调用通过验证时,您应收到预期响应。如果因负载格式不正确而导致验证失败,则返回以下错误消息:
{ "message": "Invalid request body" }
如果请求参数无效,则返回以下错误消息:
{ "message": "Missing required request parameters: [p1]" }