API의 요청 및 응답 파라미터와 상태 코드를 재정의하는 예시
다음 예시에서는 매핑 템플릿 재정의를 생성하고 테스트는 방법을 보여줍니다. 처음 두 예시에서는 AWS Management Console 및 예시 API를 시작점으로 사용합니다. 마지막 두 예시에서는 JavaScript용 AWS CLI 및 SDK를 사용합니다.
AWS Management Console을 사용하여 API의 응답 상태 코드 재정의
PetStore 샘플 API를 사용하여 반려 동물을 검색하려면 GET
/pets/{petId}
의 API 메서드 요청을 사용합니다. 여기에서 {petId}
는 실행 시간에 숫자를 받아들일 수 있는 경로 파라미터입니다.
이 예시에서는 오류 조건을 감지했을 때 $context.responseOverride.status
를 400
으로 매핑하는 매핑 템플릿을 생성하여 이 GET
메서드의 응답 코드를 재정의합니다.
https://console.aws.amazon.com/apigateway
에서 API Gateway 콘솔에 로그인합니다. -
API에서 PetStore API를 선택한 다음 리소스를 선택합니다.
-
리소스 트리에서,
/{petId}
아래의GET
메서드를 선택합니다. -
테스트 탭을 선택합니다. 탭을 표시하려면 오른쪽 화살표 버튼을 선택해야 할 수도 있습니다.
-
petId에
-1
을 입력한 다음 테스트를 선택합니다.결과에 두 가지 사실이 보입니다.
첫째, 응답 본문은 범위 밖 오류를 가리킵니다.
{ "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }
둘째, 로그 상자의 마지막 줄이
Method completed with status: 200
으로 끝납니다. -
통합 응답 탭의 기본값 - 응답에서 편집을 선택합니다.
-
매핑 템플릿을 선택합니다.
-
매핑 템플릿 추가(Add mapping template)를 선택합니다.
-
콘텐츠 유형에
application/json
을 입력합니다. -
템플릿 본문에 다음을 입력합니다.
#set($inputRoot = $input.path('$')) $input.json("$") #if($inputRoot.toString().contains("error")) #set($context.responseOverride.status = 400) #end
-
Save(저장)를 선택합니다.
-
테스트 탭을 선택합니다.
-
petId에
-1
을 입력합니다. -
결과에서 응답 본문(Response Body)은 범위 밖 오류를 가리킵니다.
{ "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }
그러나 로그 상자의 마지막 줄은 이제
Method completed with status: 400
으로 끝납니다.
AWS Management Console를 사용한 API의 요청 파라미터 및 헤더 재정의
이 예시에서는 다른 두 헤더를 결합하는 새 헤더 하나로 GET
을 매핑하는 매핑 템플릿을 생성하여 $context.requestOverride.header.
메서드의 요청 헤더 코드를 재정의합니다.header_name
https://console.aws.amazon.com/apigateway
에서 API Gateway 콘솔에 로그인합니다. -
API에서 PetStore API를 선택합니다.
-
리소스 트리에서,
/pet
아래의GET
메서드를 선택합니다. -
메서드 요청 탭의 메서드 요청 설정에서 편집을 선택합니다.
-
HTTP 요청 헤더를 선택한 다음, 헤더 추가를 선택합니다.
-
이름에
header1
을 입력합니다. -
헤더 추가를 선택한 다음
header2
라는 두 번째 헤더를 생성합니다. -
Save(저장)를 선택합니다.
-
통합 요청 탭의 통합 요청 설정에서 편집을 선택합니다.
-
요청 본문 패스스루에서 정의된 템플릿이 없는 경우(권장)를 선택합니다.
-
매핑 템플릿을 선택한 후 다음을 수행합니다.
-
매핑 템플릿 추가(Add mapping template)를 선택합니다.
-
콘텐츠 유형에
application/json
을 입력합니다. -
템플릿 본문에 다음을 입력합니다.
#set($header1Override = "foo") #set($header3Value = "$input.params('header1')$input.params('header2')") $input.json("$") #set($context.requestOverride.header.header3 = $header3Value) #set($context.requestOverride.header.header1 = $header1Override) #set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])
-
-
Save(저장)를 선택합니다.
-
테스트 탭을 선택합니다.
-
{pets}의 헤더(Headers)에 다음 코드를 복사합니다.
header1:header1Val header2:header2Val
-
테스트를 선택합니다.
로그에 다음 텍스트가 포함된 항목이 보입니다.
Endpoint request headers: {header3=header1Valheader2Val, header2=header2Val, header1=foo, x-amzn-apigateway-api-id=
<api-id>
, Accept=application/json, multivalueheader=foo,header1Valheader2Val}
AWS CLI를 사용한 API의 요청 파라미터 및 헤더 재정의
다음 CLI 예시는 put-integration
명령을 사용하여 응답 코드를 재정의하는 방법을 보여줍니다.
aws apigateway put-integration --rest-api-id
<API_ID>
--resource-id<PATH_TO_RESOURCE_ID>
--http-method<METHOD>
--type<INTEGRATION_TYPE>
--request-templates<REQUEST_TEMPLATE_MAP>
여기에서 <REQUEST_TEMPLATE_MAP>
은(는) 콘텐츠 유형에서 템플릿 문자열로 적용하는 맵입니다. 그 맵의 구조는 다음과 같습니다.
Content_type1=template_string,Content_type2=template_string
또는 JSON 구문에서:
{"content_type1": "template_string" ...}
다음 예시는 put-integration-response
명령을 사용하여 API의 응답 코드를 재정의하는 방법을 보여줍니다.
aws apigateway put-integration-response --rest-api-id
<API_ID>
--resource-id<PATH_TO_RESOURCE_ID>
--http-method<METHOD>
--status-code<STATUS_CODE>
--response-templates<RESPONSE_TEMPLATE_MAP>
여기에서 <RESPONSE_TEMPLATE_MAP>
의 형식은 <REQUEST_TEMPLATE_MAP>
와(과) 동일합니다.
JavaScript용 SDK를 사용한 API의 요청 파라미터 및 헤더 재정의
다음 예시는 put-integration
명령을 사용하여 응답 코드를 재정의하는 방법을 보여줍니다.
요청:
var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ type: HTTP | AWS | MOCK | HTTP_PROXY | AWS_PROXY, /* required */ requestTemplates: { '
<Content_type>
': 'TEMPLATE_STRING', /* '<String>
': ... */ }, }; apigateway.putIntegration(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });
응답:
var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ statusCode: 'STRING_VALUE', /* required */ responseTemplates: { '<Content_type>': 'TEMPLATE_STRING', /* '<String>': ... */ }, }; apigateway.putIntegrationResponse(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });