

# OpenAPI 파일을 가져와 기존 API 정의 업데이트
<a name="api-gateway-import-api-update"></a>

 단계와 단계 변수 또는 API 키에 대한 참조뿐 아니라 엔드포인트 구성을 변경하지 않은 상태에서 기존 API를 업데이트만할 목적으로 API 정의를 가져올 수 있습니다.

 가져와 업데이트하는 작업은 병합 또는 덮어쓰기의 두 가지 모드에서 발생할 수 있습니다.

API(`A`)를 다른 API(`B`)로 병합할 때 두 API가 충돌하는 정의를 공유하지 않으면 그 결과로 얻는 API는 `A`와 `B`의 정의를 모두 유지합니다. 충돌이 발생하는 경우 병합하는 API(`A`)의 메서드 정의가 병합되는 API(`B`)의 해당하는 메서드 정의를 재정의합니다. 예를 들어 `B`가 다음 메서드를 선언하여 `200` 및 `206` 응답을 반환했다고 가정하겠습니다.

```
GET /a
POST /a
```

그리고 `A`는 다음 메서드를 선언하여 `200` 및 `400` 응답을 반환합니다.

```
GET /a
```

`A`를 `B`에 병합하면 그 결과로 얻는 API는 다음 메서드를 출력합니다.

```
GET /a
```

`200` 및 `400` 응답을 반환하고 

```
POST /a
```

`200` 및 `206` 응답을 반환합니다.

외부 API 정의를 여러 개의 더 작은 파트로 분해하고 한 번에 한 파트의 변경사항만 적용할 경우 API 병합이 유용합니다. 예를 들어, 여러 팀이 API의 서로 다른 파트를 담당하고 있고 다른 비율로 변경사항을 사용할 수 있는 경우 병합이 발생할 수 있습니다. 이 모드에서는 가져온 정의에 특별히 정의되지 않은 기존 API의 항목이 그대로 유지됩니다.

API(`A`)가 다른 API(`B`)를 덮어쓰면 그 결과로 얻는 API는 덮어쓴 API(`A`)의 정의를 취합니다. API 덮어쓰기는 외부 API 정의에 API의 전체 정의가 포함된 경우 유용합니다. 이 모드에서는 가져온 정의에 특별히 정의되지 않은 기존 API의 항목이 삭제됩니다.

 API를 병합하려면 `PUT`에 `https://apigateway.<region>.amazonaws.com/restapis/<restapi_id>?mode=merge` 요청을 제출하세요. `restapi_id` 경로 파라미터 값이 제공된 API 정의가 병합되는 API를 지정합니다.

 다음 코드 조각에서는 JSON의 OpenAPI API 정의를 페이로드로 API Gateway의 이미 지정된 API와 병합하는 `PUT` 요청 예를 보여줍니다.

```
PUT /restapis/<restapi_id>?mode=merge
Host:apigateway.<region>.amazonaws.com
Content-Type: application/json
Content-Length: ...

An OpenAPI API definition in JSON
```

 병합 업데이트 작업에서는 2개의 전체 API 정의를 가져와서 함께 병합합니다. 소규모 증분 변경사항의 경우 [리소스 업데이트](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateResource.html) 작업을 사용할 수 있습니다.

 API를 덮어쓰려면 `PUT` 요청을 `https://apigateway.<region>.amazonaws.com/restapis/<restapi_id>?mode=overwrite`에 제출하세요. `restapi_id` 경로 파라미터는 제공된 API 정의로 덮어쓰는 API를 지정합니다.

 다음 코드 조각에서는 JSON 형식의 OpenAPI 정의의 페이로드가 포함된 덮어쓰기 요청의 예를 보여줍니다.

```
PUT /restapis/<restapi_id>?mode=overwrite
Host:apigateway.<region>.amazonaws.com
Content-Type: application/json
Content-Length: ...

An OpenAPI API definition in JSON
```

 `mode` 쿼리 파라미터가 지정되지 않은 경우 병합이 사용됩니다.

**참고**  
 `PUT` 작업은 idempotent 방식이지만 원자성 작업은 아닙니다. 즉, 처리 과정에서 시스템 오류가 발생하면 API의 상태가 좋지 않을 수 있습니다. 그러나 작업을 성공적으로 반복하면 API가 첫 번째 작업이 성공한 것과 동일한 최종 상태가 됩니다.