

# API Gateway의 간편 계산기 API
<a name="simple-calc-lambda-api"></a>

간편 계산기 API는 [간편 계산기 Lambda 함수](simple-calc-nodejs-lambda-function.md)을 호출하는 세 가지 메서드(GET, POST, GET)를 제공합니다. 이 API를 그래픽으로 나타내면 다음과 같습니다.

![\[생성된 SDK를 위한 간편 계산기 API\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/simple-calc-api-console-hierarchy-new-console.png)


다음 세 가지 메서드는 다양한 방식으로 백엔드 Lambda 함수에 대한 입력을 제공하여 동일한 작업을 수행할 수 있음을 보여 줍니다.
+ `GET /?a=...&b=...&op=...` 메서드는 쿼리 파라미터를 사용하여 입력값을 지정합니다.
+ `POST /` 메서드는 `{"a":"Number", "b":"Number", "op":"string"}`의 JSON 페이로드를 사용하여 입력값을 지정합니다.
+ `GET /{a}/{b}/{op}` 메서드는 경로 파라미터를 사용하여 입력값을 지정합니다.

정의되지 않은 경우, API Gateway는 HTTP 메서드 부분과 경로 부분을 조합하여 해당 SDK 메서드 이름을 생성합니다. 루트 경로 부분(`/`)은 `Api Root`라고 합니다. 예를 들어 `GET /?a=...&b=...&op=...` API 메서드의 기본 Java SDK 메서드 이름은 `getABOp`이고, `POST /`의 기본 SDK 메서드 이름은 `postApiRoot`이며, `GET /{a}/{b}/{op}`의 기본 SDK 메서드 이름은 `getABOp`입니다. 개별 SDK는 명명 규칙을 사용자 지정할 수 있습니다. SDK별 메서드 이름에 대해서는 생성된 SDK 소스의 설명서를 참고하십시오.

각 API 메서드에서 [operationName](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#operationName) 속성을 지정하여 기본 SDK 메서드 이름을 재정의할 수 있으며, 이렇게 재정의해야 합니다. API Gateway REST API를 사용하여 [API 메서드를 생성](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html)하거나 [API 메서드를 업데이트](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html)할 때 이렇게 재정의할 수 있습니다. API Swagger 정의에서 `operationId`를 설정하여 같은 결과를 달성할 수 있습니다.

이 API에 대해 API Gateway에서 생성된 SDK를 사용하여 이러한 메서드를 호출하는 방법을 보여드리기 전에, 먼저 메서드를 설정하는 방법을 간략하게 복습해 보겠습니다. 자세한 지침은 단원을 참조하십시오[API Gateway에서 REST API 개발](rest-api-develop.md) API Gateway를 처음 사용하는 경우 먼저 [AWS Lambda 통합 튜토리얼 선택](getting-started-with-lambda-integration.md) 단원을 참조하십시오.

## 입력 및 출력 모델 생성
<a name="simple-calc-lambda-api-create-models-for-input-and-output"></a>

강력한 입력 형식을 SDK에 지정하기 위해, 먼저 API의 `Input` 모델을 생성합니다. 응답 본문 데이터 유형을 설명하기 위해 `Output` 모델과 `Result` 모델을 생성합니다.

**입력, 출력 및 결과에 대한 모델을 생성하려면**

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

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

1. **이름**에 **input**를 입력합니다.

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

   일치하는 콘텐츠 유형이 없는 경우 요청 확인이 수행되지 않습니다. 콘텐츠 유형에 관계없이 동일한 모델을 사용하려면 **\$1default**를 입력합니다.

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

   ```
   {
       "$schema" : "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "a":{"type":"number"},
           "b":{"type":"number"},
           "op":{"type":"string"}
       },
       "title":"Input"
   }
   ```

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

1. 다음 단계를 반복하여 `Output` 모델과 `Result` 모델을 생성합니다.

   `Output` 모델의 경우 **모델 스키마**에 다음을 입력합니다.

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object",
       "properties": {
           "c": {"type":"number"}
       },
       "title": "Output"
   }
   ```

   `Result` 모델의 경우 **모델 스키마**에 다음을 입력합니다. API ID `abc123`을 해당 API ID로 바꿉니다.

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "input":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Input"
           },
           "output":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Output"
           }
       },
       "title":"Result"
   }
   ```

## GET/메서드 쿼리 파라미터 설정
<a name="simple-calc-lambda-api-set-up-get-method-query-parameters"></a>

`GET /?a=..&b=..&op=..` 메서드의 경우, **Method Request(메서드 요청)**에서 쿼리 파라미터를 선언합니다.

**GEL/URL 쿼리 문자열 파라미터를 설정하려면**

1. 루트(`/`) 리소스의 `GET` 메서드에 대한 **메서드 요청** 섹션에서 **편집**을 선택합니다.

1. **URL 쿼리 문자열 파라미터**를 선택하고 다음을 수행합니다.

   1. **쿼리 문자열 추가(Add query string)**를 선택합니다.

   1. **이름**에 **a**를 입력합니다.

   1. **필수** 상태로 유지하고 **캐싱**을 해제합니다.

   1. **캐싱**을 꺼진 상태로 둡니다.

   같은 단계를 반복하여 **b**라는 쿼리 문자열과 **op**라는 쿼리 문자열을 생성합니다.

1. **저장‭**‬을 선택합니다.

## 페이로드의 데이터 모델을 백엔드 입력값으로 설정
<a name="simple-calc-lambda-api-set-up-post-method-body-data-type"></a>

`POST /` 메서드의 경우, `Input` 모델을 생성하고 이를 메서드 요청에 추가하여 입력 데이터의 형태를 정의합니다.

**페이로드의 데이터 모델을 백엔드 입력으로 설정하려면**

1. 루트(`/`) 리소스의 `POST` 메서드에 대한 **메서드 요청** 섹션에서 **편집**을 선택합니다.

1. **요청 본문**을 선택합니다.

1. **모델 추가**를 선택합니다.

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

1. **모델**에서 **입력**을 선택합니다.

1. **저장**을 선택합니다.

이 모델을 사용하는 API 고객은 SDK를 호출하여 `Input` 객체를 인스턴스화하고 입력값을 지정할 수 있습니다. 이 모델을 사용하지 않는 고객은 딕셔너리 객체를 생성하여 Lambda 함수에 대한 JSON 입력을 표시해야 합니다.

## 백엔드 결과 출력용 데이터 모델 설정
<a name="simple-calc-lambda-api-set-up-all-methods-result-data-type"></a>

세 가지 메서드 모두에 대해 `Result` 모델을 생성하고 메서드의 `Method Response`에 추가하여 Lambda 함수에서 반환되는 출력 형태를 정의합니다.

**백엔드 결과 출력용 데이터 모델을 설정하려면**

1. **/\$1a\$1/\$1b\$1/\$1op\$1** 리소스를 선택한 다음 **GET** 메서드를 선택합니다.

1. **메서드 응답** 탭의 **응답 200**에서 **편집**을 선택합니다.

1. **요청 본문**에서 **모델 추가**를 선택합니다.

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

1. **모델**에서 **결과**를 선택합니다.

1. **저장**을 선택합니다.

API 고객은 `Result` 객체의 속성을 읽고 이 모델로 출력값을 분석할 수 있습니다. 이 모델을 사용하지 않는 경우, 고객이 딕셔너리 객체를 생성해서 JSON 출력을 표시해야 합니다.