Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

在 API Gateway 中测试基本请求验证

请选择以下任一主题,了解有关针对示例 API 测试基本请求验证的说明。

使用 API Gateway REST API 测试基本请求验证

要查看已部署的 API 的调用 URL,您可以从阶段中导出 API,同时确保其包含 Accept: application/jsonAccept: application/yaml 标头:

GET /restapis/fjd6crafxc/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}

如果您不想下载与请求验证相关的 Swagger 规范,您可以忽略 ?extensions=validators 查询参数。

使用 API Gateway REST API 调用来测试请求验证

  1. 调用 GET /validation?q1=cat

    GET /testStage/validation?q1=cat HTTP/1.1 Host: fjd6crafxc.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 } ]
  2. 调用 GET /validation

    GET /testStage/validation HTTP/1.1 Host: fjd6crafxc.beta.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]" }
  3. 调用 GET /validation?q1=

    GET /testStage/validation?q1= HTTP/1.1 Host: fjd6crafxc.beta.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json

    因为 q1 所需的参数为空,所以该请求没有通过验证。API Gateway 返回与上一个示例相同的 400 Bad Request 响应。

  4. 调用 POST /validation

    POST /testStage/validation HTTP/1.1 Host: fjd6crafxc.beta.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" }
  5. 调用 POST /validation,但不指定 h1 标头或将其值为设置空。

    POST /testStage/validation HTTP/1.1 Host: fjd6crafxc.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]" }
  6. 调用 POST /validation,同时将负载的 type 属性设置为 bird

    POST /testStage/validation HTTP/1.1 Host: fjd6crafxc.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 控制台,执行以下操作:

  1. 针对您已为其配置了请求验证程序映射的 API 选择 Resources

  2. 选择一种您已使用指定请求验证程序为其启用了请求验证的方法。

  3. Method Execution 下的 Client 框中,选择 Test

  4. 针对所需请求参数或适用正文尝试的不同值,然后选择 Test 查看响应。

当该方法调用通过验证时,您应收到预期响应。如果因负载格式不正确而导致验证失败,则返回以下错误消息:

{ "message": "Invalid request body" }

如果请求参数无效,则返回以下错误消息:

{ "message": "Missing required request parameters: [p1]" }