

# Expressões de seleção do WebSocket
<a name="apigateway-websocket-api-selection-expressions"></a>

O API Gateway usa expressões de seleção como uma maneira de avaliar o contexto de solicitação e resposta e produzir uma chave. A chave é utilizar para selecionar a partir de um conjunto de valores possíveis, normalmente fornecidos por você, que é o desenvolvedor da API. O conjunto exato de variáveis compatíveis varia de acordo com a expressão específica. Cada expressão é discutir a seguir com mais detalhes.

Para todas as expressões, o idioma segue o mesmo conjunto de regras:
+ Uma variável é prefixada com `"$"`.
+ As chaves podem ser usadas para definir explicitamente os limites da variável, por exempl., `"${request.body.version}-beta"`.
+ Várias variáveis são compatíveis, mas a avaliação ocorre somente uma vez (sem avaliação recursiva).
+ Um cifrão (`$`) pode ser recuado com `"\"`. Isso é mais útil ao definir uma expressão que mapeia para a chave reservada `$default`, por exemplo, `"\$default"`.
+ Em alguns casos, um formato padrão é obrigatório. Nesse caso, a expressão deve ser encapsulada com barras (`"/"`), por exemplo, `"/2\d\d/"` para corresponder aos códigos de status `2XX`.

**Topics**
+ [Expressões de seleção de resposta de rotas](#apigateway-websocket-api-route-response-selection-expressions)
+ [Expressões de seleção de chave da API](#apigateway-websocket-api-apikey-selection-expressions)
+ [Expressões de seleção de mapeamento da API](#apigateway-websocket-api-mapping-selection-expressions)
+ [Resumo da expressão de seleção do WebSocket](#apigateway-websocket-api-selection-expression-table)

## Expressões de seleção de resposta de rotas
<a name="apigateway-websocket-api-route-response-selection-expressions"></a>

Uma [resposta de rota](apigateway-websocket-api-route-response.md) é utilizada para modelar uma resposta do backend para o cliente. Para APIs WebSocket, uma resposta de rota é opcional. Quando definida, emite sinais para o API Gateway de que deve retornar uma resposta a um cliente após o recebimento de uma mensagem WebSocket.

A avaliação da *expressão de seleção de resposta de rotas* produz uma chave de resposta de rotas. Por fim, essa chave será usada para escolher um dos [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid-routeresponses.html](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid-routeresponses.html) associados à API. No entanto, a única chave atualmente compatível é `$default`.

## Expressões de seleção de chave da API
<a name="apigateway-websocket-api-apikey-selection-expressions"></a>

Esta expressão é avaliada quando o serviço determina que uma dada solicitação deve continuar somente se o cliente fornecer uma [chave de API](api-gateway-basic-concept.md#apigateway-definition-api-key) válida.

Atualmente, os únicos dois valores compatíveis são `$request.header.x-api-key` e `$context.authorizer.usageIdentifierKey`.

## Expressões de seleção de mapeamento da API
<a name="apigateway-websocket-api-mapping-selection-expressions"></a>

Esta expressão é avaliada para determinar qual estágio de API é selecionado quando uma solicitação é feita por meio de um domínio personalizado.

Atualmente, o único valor compatível é `$request.basepath`.

## Resumo da expressão de seleção do WebSocket
<a name="apigateway-websocket-api-selection-expression-table"></a>

A tabela a seguir resume os casos de uso para expressões de seleção em APIs WebSocket:


| Expressão de seleção | Avalia chave para | Observações | Exemplo de caso de uso | 
| --- | --- | --- | --- | 
| Api.RouteSelectionExpression | Route.RouteKey | \$1default é compatível como uma rota genérica. | Roteie mensagens WebSocket com base no contexto de uma solicitação do cliente. | 
| Route.ModelSelectionExpression | Chave para Route.RequestModels | Opcional. Se fornecida para integração não proxy, a validação do modelo ocorre. `$default` é compatível como um genérico.  | Execute a validação de solicitação dinamicamente na mesma rota. | 
| Integration.TemplateSelectionExpression | Chave para Integration.RequestTemplates |  Opcional. Pode ser fornecida para integração não proxy visando manipular as cargas de entrada. `${request.body.jsonPath}` e valores estáticos são compatíveis. `$default` é compatível como um genérico.  | Manipular a solicitação do autor da chamada nas propriedades dinâmicas da solicitação. | 
| Integration.IntegrationResponseSelectionExpression | IntegrationResponse.IntegrationResponseKey |  Opcional. Pode ser fornecida para integração não proxy. Funciona como uma correspondência de padrão para mensagens de erro (do Lambda) ou códigos de status (de integrações HTTP). `$default` é necessário para integrações não proxy visando atuar como um genérico para respostas bem-sucedidas.  |  Manipular a resposta do backend. Escolha a ação que deve ocorrer com base na resposta dinâmica do backend (por exemplo, manipular determinados erros de forma distinta).  | 
| IntegrationResponse.TemplateSelectionExpression | Chave para IntegrationResponse.ResponseTemplates | Opcional. Pode ser fornecida para integração não proxy. O padrão \$1 é compatível.  |  Em alguns casos, uma propriedade dinâmica da resposta pode ditar transformações diferentes na mesma rota e integração associada. `${request.body.jsonPath}`, `${integration.response.statuscode}`, `${integration.response.header.headerName}`, `${integration.response.multivalueheader.headerName}`, e valores estáticos são compatíveis. `$default` é compatível como um genérico.  | 
| Route.RouteResponseSelectionExpression | RouteResponse.RouteResponseKey |  Deve ser fornecido para iniciar a comunicação bidirecional para uma rota do WebSocket. Atualmente, este valor é restrito apenas ao `$default`.  |  | 
| RouteResponse.ModelSelectionExpression | Chave para RouteResponse.RequestModels | Atualmente incompatível. |  | 