API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답 설정 - Amazon API Gateway

API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답 설정

다음 예시에서는 API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답을 설정하는 방법을 보여줍니다.

API Gateway 콘솔을 사용하여 게이트웨이 응답을 사용자 지정하려면
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. REST API를 선택합니다.

  3. 기본 탐색 창에서 게이트웨이 응답을 선택합니다.

  4. 응답 유형을 선택한 다음 편집을 선택합니다. 이 연습에서는 누락된 인증 토큰을 예로 들겠습니다.

  5. API Gateway가 생성한 상태 코드를 변경하여, 사용자 API의 요구 사항에 부합하는 다른 상태 코드를 반환할 수 있습니다. 이 예에서 사용자 지정은 상태 코드를 기본값(403)에서 404로 변경합니다. 클라이언트가 지원되지 않거나 잘못되어 찾을 수 없는 리소스를 호출할 경우 이 오류 메시지가 발생하기 때문입니다.

  6. 사용자 지정 헤더를 반환하려면 응답 헤더에서 헤더 추가를 선택합니다. 설명을 위해 다음 사용자 지정 헤더를 추가하겠습니다.

    Access-Control-Allow-Origin:'a.b.c' x-request-id:method.request.header.x-amzn-RequestId x-request-path:method.request.path.petId x-request-query:method.request.querystring.q

    앞서 본 헤더 매핑에서 정적 도메인 이름('a.b.c')은 Allow-Control-Allow-Origin 헤더에 매핑되어 API에 대한 CORS 액세스를 허용합니다. x-amzn-RequestId의 입력 요청 헤더는 응답의 request-id에 매핑됩니다. 수신되는 요청의 petId 경로 변수는 응답의 request-path 헤더에 매핑됩니다. 원래 요청의 q 쿼리 파라미터는 응답의 request-query 헤더에 매핑됩니다.

  7. 응답 템플릿에서 콘텐츠 유형application/json를 유지하고 템플릿 본문 편집기에 다음과 같은 본문 매핑 템플릿을 입력합니다.

    { "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }

    이 예는 게이트웨이 응답 본문의 속성에 $context$stageVariables 속성을 매핑하는 방법을 보여줍니다.

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

  9. 새 단계 또는 기존 단계에 API를 배포합니다.

해당 API 메서드의 호출 URL이 https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}라고 가정하고 다음 CURL 명령을 호출하여 게이트웨이 응답을 테스트합니다.

curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1

추가적인 쿼리 문자열 파라미터 q=1이 API와 호환되지 않기 때문에 지정된 게이트웨이 응답에서 오류가 반환됩니다. 다음과 비슷한 게이트웨이 응답이 표시됩니다.

> GET /custErr/pets/5?q=1 HTTP/1.1 Host: o81lxisefl.execute-api.us-east-1.amazonaws.com User-Agent: curl/7.51.0 Accept: */* HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 334 Connection: keep-alive Date: Tue, 02 May 2017 03:15:47 GMT x-amzn-RequestId: 123344566 Access-Control-Allow-Origin: a.b.c x-amzn-ErrorType: MissingAuthenticationTokenException header-1: static x-request-query: 1 x-request-path: 5 X-Cache: Error from cloudfront Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront) X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA== { "message":"Missing Authentication Token", "type": MISSING_AUTHENTICATION_TOKEN, "statusCode": '404', "stage": custErr, "resourcePath": /pets/{petId}, "stageVariables.a": a }

앞의 예에서는 API 백엔드가 Pet Store이고 API에 단계 변수, a가 정의된 것으로 가정했습니다.