

# 在 API Gateway 中设置 WebSocket API 集成响应
<a name="apigateway-websocket-api-integration-responses"></a>

下一节简要概述了 WebSocket API 的集成响应，以及如何为 WebSocket API 设置集成响应。

**Topics**
+ [集成响应概述](#apigateway-websocket-api-integration-response-overview)
+ [双向通信的集成响应](#apigateway-websocket-api-integration-response-for-two-way-communication)
+ [使用 API Gateway 控制台设置集成响应](#apigateway-websocket-api-integration-response-using-console)
+ [使用 Amazon CLI 设置集成响应](#apigateway-websocket-api-integration-response-using-awscli)

## 集成响应概述
<a name="apigateway-websocket-api-integration-response-overview"></a>

API Gateway 的集成响应是一种用于对后端服务的响应进行建模和处理的方法。REST API 与 WebSocket API 集成响应的设置存在一些差别，但从概念上讲，行为是相同的。

WebSocket 路由可以配置为双向或单向通信。
+ 当路由配置为双向通信时，集成响应能让您对返回的消息负载配置转换，类似于 REST API 的集成响应。
+ 如果路由配置为单向通信，则无论是否有任何集成响应配置，在处理消息后都不会通过 WebSocket 通道返回响应。

 除非您设置了路由响应，否则 API Gateway 不会将后端响应传递给路由响应。要了解有关设置路径响应的信息，请参阅 [为 API Gateway 中的 WebSocket API 设置路由响应](apigateway-websocket-api-route-response.md)。

## 双向通信的集成响应
<a name="apigateway-websocket-api-integration-response-for-two-way-communication"></a>

集成可以分为*代理*集成和*非代理*集成。

**重要**  
对于*代理集成*，API Gateway 会自动将后端输出作为完整的负载传递给调用方。没有集成响应。

对于*非代理集成*，您必须至少设置一个集成响应：
+ 理想情况下，您的一个集成响应应该在无法进行明确的选择时是包罗万象的响应。此默认情况是通过设置 `$default` 的集成响应键来表示的。
+ 在所有其他情况下，集成响应键起正则表达式的作用。它应遵循 `"/expression/"` 格式。

对于非代理 HTTP 集成：
+ API Gateway 将尝试匹配后端响应的 HTTP 状态代码。在这种情况下，集成响应键将起正则表达式的作用。如果找不到匹配项，则会选择 `$default` 作为集成响应。
+ 如上所述，模板选择表达式的作用相同。例如：
  + `/2\d\d/`：接收并转换成功响应
  + `/4\d\d/`：接收并转换不正确的请求错误
  + `$default`：接收并转换所有意外响应

有关模板选择表达式的更多信息，请参阅 [模板选择表达式](websocket-api-data-transformations.md#apigateway-websocket-api-template-selection-expressions)。

## 使用 API Gateway 控制台设置集成响应
<a name="apigateway-websocket-api-integration-response-using-console"></a>

要使用 API Gateway 控制台为 WebSocket API 设置路由集成响应，请执行以下操作：

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.amazonaws.cn/apigateway)。

1.  选择 WebSocket API，然后选择路由。

1. 选择**集成请求**选项卡，然后在**集成响应设置**部分中，选择**创建集成响应**。

1. 对于**响应密钥**，输入一个值，该值将在评估响应选择表达式后在传出消息中的响应密钥中找到。例如，您可以输入 **/4\$1d\$1d/** 以接收和转换错误的请求错误，也可以输入 **\$1default** 以接收和转换与模板选择表达式匹配的所有响应。

1. 对于**模板选择表达式**，输入选择表达式来评估传出的消息。

1. 选择**创建响应**。

1. 您还可以定义映射模板来配置返回的消息有效负载的转换。选择**创建模板**。

1. 输入键名称。如果您选择的是默认模板选择表达式，请输入 **\$1\$1default**。

1. 对于**响应模板**，请在代码编辑器中输入您的映射模板。

1. 选择**创建模板**。

1. 选择**部署 API** 以部署您的 API。

 使用以下 [wscat](https://www.npmjs.com/package/wscat) 命令连接到您的 API。有关 `wscat` 的更多信息，请参阅[使用 `wscat` 连接到 WebSocket API 并向其发送消息](apigateway-how-to-call-websocket-api-wscat.md)。

```
wscat -c wss://api-id.execute-api.us-east-2.amazonaws.com/test
```

 当您调用路由时，应返回消息有效负载。

## 使用 Amazon CLI 设置集成响应
<a name="apigateway-websocket-api-integration-response-using-awscli"></a>

使用以下 [create-integration-response](https://docs.amazonaws.cn/cli/latest/reference/apigatewayv2/create-integration-response.html) 命令创建 `$default` 集成响应：

```
aws apigatewayv2 create-integration-response \
    --api-id vaz7da96z6 \
    --integration-id a1b2c3 \
    --integration-response-key '$default'
```