다음 예시에서는 API Gateway 콘솔을 사용하여 REST API에 대한 게이트웨이 응답을 설정하는 방법을 보여줍니다.
API Gateway 콘솔을 사용하여 게이트웨이 응답을 사용자 지정하려면
https://console.aws.amazon.com/apigateway
에서 API Gateway 콘솔에 로그인합니다. REST API를 선택합니다.
-
기본 탐색 창에서 게이트웨이 응답을 선택합니다.
-
응답 유형을 선택한 다음 편집을 선택합니다. 이 연습에서는 누락된 인증 토큰을 예로 들겠습니다.
-
API Gateway가 생성한 상태 코드를 변경하여, 사용자 API의 요구 사항에 부합하는 다른 상태 코드를 반환할 수 있습니다. 이 예에서 사용자 지정은 상태 코드를 기본값(
403
)에서404
로 변경합니다. 클라이언트가 지원되지 않거나 잘못되어 찾을 수 없는 리소스를 호출할 경우 이 오류 메시지가 발생하기 때문입니다. -
사용자 지정 헤더를 반환하려면 응답 헤더에서 헤더 추가를 선택합니다. 설명을 위해 다음 사용자 지정 헤더를 추가하겠습니다.
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
헤더에 매핑됩니다. -
응답 템플릿에서 콘텐츠 유형은
application/json
를 유지하고 템플릿 본문 편집기에 다음과 같은 본문 매핑 템플릿을 입력합니다.{ "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }
이 예는 게이트웨이 응답 본문의 속성에
$context
및$stageVariables
속성을 매핑하는 방법을 보여줍니다. -
Save changes(변경 사항 저장)를 선택합니다.
-
새 단계 또는 기존 단계에 API를 배포합니다.
해당 API 메서드의 호출 URL이 https://
라고 가정하고 다음 CURL 명령을 호출하여 게이트웨이 응답을 테스트합니다.o81lxisefl
.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}
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 Storea
가 정의된 것으로 가정했습니다.