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

使用 API Gateway 控制台设置网关响应

使用 API Gateway 控制台自定义网关响应

  1. 登录到 API Gateway 控制台。

  2. 选择现有的 API 或新建一个 API。

  3. 在主导航窗格中展开 API,然后在 API 下选择 Gateway Responses (网关响应)

  4. Gateway Responses (网关响应) 窗格中,选择响应类型。在本次演练中,我们将以 Missing Authentication Token (403) (缺失身份验证令牌 (403)) 为例。

  5. 您可以更改 API Gateway 生成的 Status Code,以返回满足您的 API 要求的不同状态代码。在此示例中,自定义会将状态代码从默认值 (403) 更改为 404,因为在客户端调用可被视为未找到的不受支持或无效的资源时,会出现此错误消息。

  6. 要返回自定义标头,请选择 Response Headers (响应标头) 下的 Add Header (添加标头)。为方便说明,我们将添加以下自定义标头:

    Access-Control-Allow-Origin:'a.b.c' x-request-id:method.request.header.x-amzn-RequestId x-request-path:method.request.path.petId x-request-query:method.request.querystring.q

    在前面的标头映射中,将静态域名 ('a.b.c') 映射到 Allow-Control-Allow-Origin 标头以允许 CORS 访问 API;将 x-amzn-RequestId 的输入请求标头映射到响应中的 request-id;将传入请求的 petId 路径变量映射到响应中的 request-path 标头;以及将原始请求的 q 查询参数映射到响应的 request-query 标头。

  7. Body Mapping Templates (正文映射模板) 下,将 application/json 保留为 Content Type (内容类型),然后在 Body Mapping Template (正文映射模板) 编辑器中键入以下正文映射模板:

    { "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }

    此示例显示了如何将 $context$stageVariables 属性映射到网关响应正文的属性。

  8. 选择 Save (保存)

  9. 将 API 部署到新阶段或现有阶段。

  10. 通过调用以下 CURL 命令并假设相应 API 方法的调用 URL 是 https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId},进行测试:

    curl -v -H 'x-amnz-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1

    因为额外查询字符串参数 q=1 与 API 不兼容,所以返回错误,从而触发特定的网关响应。您应收到与以下内容类似的网关响应:

    > GET /custErr/pets/5?q=1 HTTP/1.1 Host: o81lxisefl.execute-api.us-east-1.amazonaws.com User-Agent: curl/7.51.0 Accept: */* HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 334 Connection: keep-alive Date: Tue, 02 May 2017 03:15:47 GMT x-amzn-RequestId: a2be05a4-2ee5-11e7-bbf2-df131ec50ae6 Access-Control-Allow-Origin: a.b.c x-amzn-ErrorType: MissingAuthenticationTokenException header-1: static x-request-query: 1 x-request-path: 5 X-Cache: Error from cloudfront Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront) X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA== { "message":"Missing Authentication Token", "type": MISSING_AUTHENTICATION_TOKEN, "statusCode": '404', "stage": custErr, "resourcePath": /pets/{petId}, "stageVariables.a": a }

    前面的示例假定 API 后端为 Pet Store,并且 API 有一个定义的阶段变量 a