API Gateway의 WebSocket API 검증 요청 - Amazon API Gateway

API Gateway의 WebSocket API 검증 요청

통합 요청을 진행하기 전에 라우팅 요청의 확인을 수행하도록 API Gateway를 구성할 수 있습니다. 유효성 검사가 실패하면 API Gateway는 백엔드를 호출하지 않고 요청을 실패 처리하고, 클라이언트에 “잘못된 요청 본문” 게이트웨이 응답을 전송한 다음 CloudWatch Logs에 유효성 검사 결과를 게시합니다. 이런 식으로 유효성 검사를 이용하면 API 백엔드에 대한 불필요한 호출을 줄일 수 있습니다.

모델 선택 표현식

모델 선택 표현식을 사용하여 동일한 라우팅 내에서 요청을 동적으로 유효성 검사할 수 있습니다. 프록시 또는 비프록시 통합에 대한 모델 선택 표현식을 제공하는 경우 모델 유효성 검사가 수행됩니다. 일치하는 모델이 없으면 $default 모델을 폴백으로 정의해야 할 수도 있습니다. 일치하는 모델이 없고 $default가 정의되지 않으면 유효성 검사가 실패합니다. 선택 표현식은 Route.ModelSelectionExpression과 같고, Route.RequestModels의 키를 평가합니다.

WebSocket API에 대해 라우팅을 정의할 때 선택적으로 모델 선택 표현식을 지정할 수 있습니다. 이 표현식은 요청이 수신될 때 본문 확인에 사용될 모델을 선택하기 위해 평가됩니다. 표현식은 라우팅의 requestmodels에서 항목 중 하나를 평가합니다.

모델은 JSON 스키마로 표시되고 요청 본문의 데이터 구조를 설명합니다. 이 선택 표현식의 속성상, 실행 시간에 특정 라우팅을 기준으로 유효성 검사를 수행할 모델을 동적으로 선택할 수 있습니다. 모델 생성에 대한 자세한 내용은 REST API에 대한 데이터 모델 단원을 참조하십시오.

API Gateway 콘솔을 사용하여 요청 확인 설정

다음 예시에서는 라우팅에서 요청 검증을 설정하는 방법을 보여줍니다.

먼저 모델을 생성한 다음 라우팅을 생성합니다. 다음으로 방금 생성한 경로에 요청 검증을 구성합니다. 마지막으로, API를 배포 및 테스트합니다. 이 자습서를 완료하려면 경로 선택 표현식으로 $request.body.action을 사용하는 WebSocket API와 새 경로에 대한 통합 엔드포인트가 필요합니다.

또한 API에 연결하기 위해 wscat가 필요합니다. 자세한 내용은 wscat를 사용하여 WebSocket API에 연결하고 메시지 보내기 단원을 참조하십시오.

모델을 생성하는 방법
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. WebSocket API를 선택합니다.

  3. 기본 탐색 창에서 모델을 선택합니다.

  4. Create model(모델 생성)을 선택합니다.

  5. 이름emailModel을 입력합니다.

  6. 콘텐츠 유형에 application/json을 입력합니다.

  7. 모델 스키마에서 다음 모델을 입력합니다.

    { "$schema": "http://json-schema.org/draft-04/schema#", "type" : "object", "required" : [ "address"], "properties" : { "address": { "type": "string" } } }

    이 모델에서는 요청에 이메일 주소가 포함되어야 합니다.

  8. Save(저장)를 선택합니다.

이 단계에서는 WebSocket API에 대한 라우팅을 생성합니다.

경로 생성
  1. 기본 탐색 창에서 경로를 선택합니다.

  2. 경로 생성(Create route)을 선택합니다.

  3. 경로 키(Route key)sendMessage를 입력합니다.

  4. 통합 유형을 선택하고 통합 엔드포인트를 지정합니다. 자세한 정보는 API Gateway의 WebSocket API 통합 섹션을 참조하세요.

  5. 경로 생성(Create route)을 선택합니다.

이 단계에서는 sendMessage 경로에 대한 요청 검증을 설정합니다.

요청 검증을 설정하려면
  1. 경로 요청 탭의 경로 요청 설정에서 편집을 선택합니다.

  2. 모델 선택 표현식에는 ${request.body.messageType}을 입력합니다.

    API Gateway는 messageType 속성을 사용하여 수신 요청을 검증합니다.

  3. 요청 모델 추가를 선택합니다.

  4. 모델 키email을 입력합니다.

  5. 모델에서는 이메일 모델을 선택합니다.

    API 게이트웨이는 이 모델에 대해 messageType 속성이 email로 설정된 수신 메시지의 유효성을 검사합니다.

    참고

    API Gateway가 모델 선택 표현식을 모델 키와 일치시킬 수 없는 경우 $default 모델을 선택합니다. $default 모델이 없으면 유효성 검사가 실패합니다. 프로덕션 API의 경우 $default 모델을 생성하는 것이 좋습니다.

  6. Save changes(변경 사항 저장)를 선택합니다.

이 단계에서는 API를 배포 및 테스트합니다.

API 배포 및 테스트하기
  1. Deploy API(API 배포)를 선택합니다.

  2. 드롭다운 목록에서 원하는 스테이지를 선택하거나 새 스테이지의 이름을 입력하십시오.

  3. 배포를 선택합니다.

  4. 기본 탐색 창에서 스테이지를 선택합니다.

  5. API의 WebSocket URL을 복사합니다. URL은 wss://abcdef123.execute-api.us-east-2.amazonaws.com/production와 같아야 합니다.

  6. 새 터미널을 열고 다음 파라미터를 사용하여 wscat 명령을 실행합니다.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. 다음 명령을 사용하여 API를 테스트합니다.

    {"action": "sendMessage", "messageType": "email"}
    {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}

    API Gateway는 해당 요청을 실패시킵니다.

    다음 명령어를 사용하여 API에 유효한 요청을 보냅니다.

    {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}