

# API Gateway 的 WebSocket API 映射模板参考
<a name="apigateway-websocket-api-mapping-template-reference"></a>

本节总结了 API Gateway 中 WebSocket API 当前支持的变量集。


| 参数 | 说明 | 
| --- | --- | 
| $context.connectionId | 连接的唯一 ID，可用于对客户端进行回调。 | 
| $context.connectedAt | [Epoch](https://en.wikipedia.org/wiki/Unix_time) 格式的连接时间。 | 
| $context.domainName | WebSocket API 的域名。这可用于对客户端进行回调（而不是硬编码值）。 | 
| $context.eventType | 事件类型：`CONNECT`、`MESSAGE` 或 `DISCONNECT`。 | 
| $context.messageId | 消息的唯一服务器端 ID。仅当 `$context.eventType` 为 `MESSAGE` 时才可用。 | 
| $context.routeKey | 选定的路由键。 | 
| $context.requestId | 与 `$context.extendedRequestId` 相同。 | 
| $context.extendedRequestId | 为 API 调用自动生成的 ID，其中包含用于调试/故障排除的更有用的信息。 | 
| $context.apiId | API Gateway 分配给您的 API 的标识符。 | 
| $context.authorizer.principalId | 与由客户端发送的令牌关联并从 API Gateway Lambda 授权方（以前称为自定义授权方）Lambda 函数返回的委托人用户标识。 | 
| $context.authorizer.{{property}} | 从 API Gateway Lambda 授权方函数返回的 `context` 映射的指定键/值对的字符串化值。例如，如果授权方返回以下 `context` 映射：<pre>"context" : {<br />  "key": "value",<br />  "numKey": 1,<br />  "boolKey": true<br />}</pre><br />调用 `$context.authorizer.key` 将返回 `"value"` 字符串，调用 `$context.authorizer.numKey` 将返回 `"1"` 字符串，而调用 `$context.authorizer.boolKey` 将返回 `"true"` 字符串。 | 
| $context.error.messageString | $context.error.message 的带引号的值，即 "$context.error.message"。 | 
| $context.error.validationErrorString | 包含详细验证错误消息的字符串。 | 
| $context.identity.accountId | 与请求关联的 Amazon 账户 ID。 | 
| $context.identity.apiKey | API 所有者密钥与启用密钥的 API 请求关联。 | 
| $context.identity.apiKeyId | API 密钥 ID 与启用密钥的 API 请求关联 | 
| $context.identity.caller | 发出请求的调用方的委托人标识符。 | 
| $context.identity.cognitoAuthenticationProvider | 发出请求的调用方使用的所有 Amazon Cognito 身份验证提供程序的逗号分隔列表。仅当使用 Amazon Cognito 凭证对请求签名时才可用。<br />例如，对于 Amazon Cognito 身份池中的身份，`cognito-idp. {{region}}.amazonaws.com/{{user_pool_id}},cognito-idp.{{region}}.amazonaws.com/{{user_pool_id}}:CognitoSignIn:{{token subject claim}}`<br />有关更多信息，请参阅 *Amazon Cognito 开发人员指南* 中的[使用联合身份](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-identity.html)。 | 
| $context.identity.cognitoAuthenticationType | 发出请求的调用方的 Amazon Cognito 身份验证类型。仅当使用 Amazon Cognito 凭证对请求签名时才可用。可能的值包括经过身份验证的身份的 `authenticated` 和未经身份验证的身份的 `unauthenticated`。 | 
| $context.identity.cognitoIdentityId | 发出请求的调用方的 Amazon Cognito 身份 ID。仅当使用 Amazon Cognito 凭证对请求签名时才可用。 | 
| $context.identity.cognitoIdentityPoolId | 发出请求的调用方的 Amazon Cognito 身份池 ID。仅当使用 Amazon Cognito 凭证对请求签名时才可用。 | 
| $context.identity.sourceIp | 向 API Gateway 终端节点发出请求的即时 TCP 连接的源 IP 地址。 | 
| $context.identity.user | 发出请求的用户的委托人标识符。 | 
| $context.identity.userAgent | API 调用方的用户代理。 | 
| $context.identity.userArn | 身份验证后标识的有效用户的 Amazon Resource Name (ARN)。 | 
| $context.requestTime | [CLF](https://httpd.apache.org/docs/current/logs.html#common) 格式的请求时间 (dd/MMM/yyyy:HH:mm:ss \+-hhmm)。 | 
| $context.requestTimeEpoch | [Epoch](https://en.wikipedia.org/wiki/Unix_time) 格式的请求时间，以毫秒为单位。 | 
| $context.stage | API 调用的部署阶段（例如测试或生产）。 | 
| $context.status | 响应状态。 | 
| $input.body | 以字符串形式返回原始负载。 | 
| $input.json(x) | 此函数计算 JSONPath 表达式并以 JSON 字符串形式返回结果。<br />例如，`$input.json('$.pets')` 将返回一个表示宠物结构的 JSON 字符串。<br />有关 JSONPath 的更多信息，请参阅 [JSONPath](https://goessner.net/articles/JsonPath/) 或[适用于 Java 的 JSONPath](https://github.com/json-path/JsonPath)。 | 
| $input.path(x) | 获取一个 JSONPath 表达式字符串 (`x`) 并返回结果的 JSON 对象表达式。这样，您便可通过 [Apache Velocity 模板语言 (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) 在本机访问和操作负载的元素。<br />例如，如果表达式 `$input.path('$.pets')` 返回一个如下所示的对象：<pre>[<br />  { <br />    "id": 1, <br />    "type": "dog", <br />    "price": 249.99 <br />  }, <br />  { <br />    "id": 2, <br />    "type": "cat", <br />    "price": 124.99 <br />  }, <br />  { <br />    "id": 3, <br />    "type": "fish", <br />    "price": 0.99 <br />  } <br />]</pre><br />`$input.path('$.pets').count()` 将返回 `"3"`。<br />有关 JSONPath 的更多信息，请参阅 [JSONPath](http://goessner.net/articles/JsonPath/) 或[适用于 Java 的 JSONPath](https://github.com/jayway/JsonPath)。 | 
| $stageVariables.{{<variable\_name>}} | {{<variable\_name>}} 表示阶段变量名称。 | 
| $stageVariables['{{<variable\_name>}}'] | {{<variable\_name>}} 表示任何阶段变量名称。 | 
| ${stageVariables['{{<variable\_name>}}']} | {{<variable\_name>}} 表示任何阶段变量名称。 | 
| $util.escapeJavaScript() | 使用 JavaScript 字符串规则对字符串中的字符进行转义。 此函数会将任何常规单引号 (`'`) 变成转义单引号 (`\'`)。但是，转义单引号在 JSON 中无效。因此，当此函数的输出用于 JSON 属性时，必须将任何转义单引号 (`\'`) 变回常规单引号 (`'`)。如下例所示:  <pre> $util.escapeJavaScript({{data}}).replaceAll("\\'","'")</pre>  | 
| $util.parseJson() |  获取“字符串化的”JSON 并返回结果的对象表示形式。您可以使用此函数的结果通过 Apache Velocity 模板语言 (VTL) 在本机访问和操作负载的元素。例如，如果您具有以下负载：<pre>{"errorMessage":"{\"key1\":\"var1\",\"key2\":{\"arr\":[1,2,3]}}"}</pre><br /> 并使用以下映射模板 <pre>#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))<br />{<br />   "errorMessageObjKey2ArrVal" : $errorMessageObj.key2.arr[0]<br />}<br /></pre><br />您将得到以下输出：<pre>{<br />   "errorMessageObjKey2ArrVal" : 1<br />}<br /></pre> | 
| $util.urlEncode() | 将字符串转换为“application/x-www-form-urlencoded”格式。 | 
| $util.urlDecode() | 对“application/x-www-form-urlencoded”字符串进行解码。 | 
| $util.base64Encode() | 将数据编码为 base64 编码的字符串。 | 
| $util.base64Decode() | 对 base64 编码字符串中的数据进行解码。 | 