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

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가 정의된 것으로 가정했습니다.