

# WebSocket 선택 표현식
<a name="apigateway-websocket-api-selection-expressions"></a>

API Gateway는 요청 및 응답 컨텍스트를 평가하고 키를 생성하는 방법의 하나로 선택 표현식을 사용합니다. 이 경우 키는 일반적으로 API 개발자가 제공하는 가능한 값 집합 중에서 선택하는 데 사용됩니다. 지원되는 변수 집합은 특정 표현식에 따라 달라집니다. 각 표현식에 대해서는 아래에서 자세히 설명합니다.

모든 표현식에 대해 언어는 동일한 규칙 세트를 따릅니다.
+ 변수에는 `"$"`라는 접두사가 붙습니다.
+ 중괄호를 사용하여 변수 경계를 명시적으로 정의할 수 있습니다(예: `"${request.body.version}-beta"`).
+ 여러 변수가 지원되지만 평가는 한 번만 발생합니다(recursive 평가 없음).
+ 달러 문자(`$`)는 `"\"`로 이스케이프될 수 있습니다. 예약된 `$default` 키에 매핑되는 표현식을 정의할 때 가장 유용합니다(예: `"\$default"`).
+ 경우에 따라 패턴 형식이 필요합니다. 이 경우 표현식은 슬래시(`"/"`)로 래핑해야 합니다(예: `"/2\d\d/"` 상태 코드와 일치하도록 `2{{XX}}`).

**Topics**
+ [라우팅 응답 선택 표현식](#apigateway-websocket-api-route-response-selection-expressions)
+ [API 키 선택 표현식](#apigateway-websocket-api-apikey-selection-expressions)
+ [API 매핑 선택 표현식](#apigateway-websocket-api-mapping-selection-expressions)
+ [WebSocket 선택 표현식 요약](#apigateway-websocket-api-selection-expression-table)

## 라우팅 응답 선택 표현식
<a name="apigateway-websocket-api-route-response-selection-expressions"></a>

[라우팅 응답](apigateway-websocket-api-route-response.md)은 백엔드에서 클라이언트로 응답을 모델링하는 데 사용됩니다. WebSocket API에서 라우팅 응답은 선택 사항입니다. 정의되면, WebSocket 메시지 수신 시 클라이언트에 응답을 반환해야 한다는 신호를 API Gateway에 보냅니다.

*라우팅 응답 선택 표현식*의 평가는 라우팅 응답 키를 생성합니다. 결국 이 키는 API와 연결된 [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) 중에서 하나를 선택하는 데 사용됩니다. 그러나 현재는 `$default` 키만 지원됩니다.

## API 키 선택 표현식
<a name="apigateway-websocket-api-apikey-selection-expressions"></a>

클라이언트가 유효한 [API 키](api-gateway-basic-concept.md#apigateway-definition-api-key)를 제공하는 경우에만 요청이 진행되어야 한다고 서비스가 판단할 때 이 표현식이 평가됩니다.

현재 지원되는 두 가지 값은 `$request.header.x-api-key` 및 `$context.authorizer.usageIdentifierKey`입니다.

## API 매핑 선택 표현식
<a name="apigateway-websocket-api-mapping-selection-expressions"></a>

이 표현식은 사용자 지정 도메인을 사용하여 요청이 이루어질 때 선택되는 API 스테이지를 결정하기 위해 평가됩니다.

현재 지원되는 값은 `$request.basepath`입니다.

## WebSocket 선택 표현식 요약
<a name="apigateway-websocket-api-selection-expression-table"></a>

다음 표는 WebSocket API의 선택 표현식 사용 사례를 요약한 것입니다.


| 선택 표현식 | 다음에 대한 키 평가 | 참고 | 사용 사례 | 
| --- | --- | --- | --- | 
| Api.RouteSelectionExpression | Route.RouteKey | $default는 catch-all 라우팅으로 지원됩니다. | 클라이언트 요청 컨텍스트를 기반으로 WebSocket 메시지를 라우팅합니다. | 
| Route.ModelSelectionExpression | Route.RequestModels에 대한 키 | 선택.<br />비 프록시 통합에 제공되는 경우 모델 확인이 이루어집니다.<br />`$default`는 catch-all로 지원됩니다. | 동일한 라우팅 내에서 요청 확인을 동적으로 수행합니다. | 
| Integration.TemplateSelectionExpression | Integration.RequestTemplates에 대한 키 | 선택.<br />수신 페이로드를 조작하기 위해 비 프록시 통합에 제공될 수 있습니다.<br />`${request.body.jsonPath}` 및 정적 값이 지원됩니다.<br />`$default`는 catch-all로 지원됩니다. | 요청의 동적 속성을 기반으로 호출자의 요청을 조작합니다. | 
| Integration.IntegrationResponseSelectionExpression | IntegrationResponse.IntegrationResponseKey | 선택. 비 프록시 통합을 위해 제공될 수 있습니다.<br />오류 메시지(Lambda의) 또는 상태 코드(HTTP 통합의)에 대한 패턴 일치로 작동합니다.<br />`$default`는 비 프록시 통합이 성공적인 응답에 대한 catch-all 역할을 하는 데 필요합니다. | 백엔드의 응답을 조작합니다.<br />백엔드의 동적 응답에 따라 수행할 작업을 선택하십시오(예: 특정 오류를 명확히 처리). | 
| IntegrationResponse.TemplateSelectionExpression | IntegrationResponse.ResponseTemplates에 대한 키 | 선택. 비 프록시 통합을 위해 제공될 수 있습니다.$default가 지원됩니다. | 경우에 따라 응답의 동적 속성은 동일한 라우팅 및 연결된 통합 내에서 다양한 변환을 지시할 수 있습니다.<br />`${request.body.jsonPath}` ,`${integration.response.statuscode}`,`${integration.response.header.headerName}` `${integration.response.multivalueheader.headerName}` ,및 정적 값이 지원됩니다.<br />`$default`는 catch-all로 지원됩니다. | 
| Route.RouteResponseSelectionExpression | RouteResponse.RouteResponseKey | WebSocket 라우팅에 대한 양방향 통신을 시작하기 위해 제공되어야 합니다.<br />현재 이 값은 `$default`로 제한됩니다. |  | 
| RouteResponse.ModelSelectionExpression | RouteResponse.RequestModels에 대한 키 | 현재 지원되지 않습니다. |  | 