

# API Gateway가 라우팅 규칙을 평가하는 방법의 예
<a name="rest-api-routing-rules-examples"></a>

다음 섹션에서는 API Gateway가 라우팅 규칙 및 API 매핑을 평가하는 방법의 네 가지 예를 보여줍니다.

## 예제 1: 라우팅 규칙만
<a name="rest-api-routing-rules-examples-rule-only"></a>

이 예제에서 사용자 지정 도메인 이름 `https://petstore.example.com`의 라우팅 모드는 `ROUTING_RULE_ONLY`로 설정되며 다음 라우팅 규칙 및 우선순위를 포함합니다.


|  규칙 ID  |  우선순위  |  조건  |  작업  | 
| --- | --- | --- | --- | 
| `abc123` |  10  |  요청에 `Hello:World` 헤더가 포함된 경우  |  대상 API 1  | 
| `zzz000` |  50  |  요청에 `Accept:image/webp` 및 `Pet:Dog-*` 헤더가 포함되어 있으며 기본 경로에 `PetStoreShopper`가 포함된 경우 |  대상 API 2  | 
| `efg456` |  100  | 없음 |  대상 API 3  | 

다음 표는 API Gateway가 이전 라우팅 규칙을 예제 요청에 적용하는 방법을 보여줍니다.


| 요청 | 선택한 API | 설명 | 
| --- | --- | --- | 
| `https://petstore.example.com -h "Hello:World"` | 대상 API 1 | 요청은 라우팅 규칙 `abc123`과 일치합니다. | 
| `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"` | 대상 API 1 | API Gateway는 모든 라우팅 규칙을 우선순위에 따라 평가합니다. 라우팅 규칙 `abc123`은 우선순위가 가장 높고 조건이 일치하므로 API Gateway는 대상 API 1을 간접적으로 호출합니다.<br />요청 조건이 라우팅 규칙 `zzz000`과도 일치하지만 API Gateway는 일치가 완료된 후 다른 라우팅 규칙을 평가하지 않습니다. | 
| `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"` | 대상 API 2 | 요청은 라우팅 규칙 `zzz000`과 일치합니다. `Pet:Dog-Bella`가 `Pet:Dog-*`와 문자열 일치이므로 일치됩니다. | 
| `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"` | 대상 API 3 | 요청이 라우팅 규칙 `abc123`과 일치하지 않습니다. 필요한 모든 헤더가 존재하지 않으므로 요청이 라우팅 규칙 `zzz000`과 일치하지 않습니다. 다음 우선순위 규칙은 모든 수신 요청과 일치하므로 API Gateway는 대상 API 3을 간접적으로 호출합니다. | 

## 예제 2: 라우팅 규칙 및 API 매핑
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

이 예제에서 사용자 지정 도메인 이름 `https://petstore.diagram.example.com`의 라우팅 모드는 `ROUTING_RULE_THEN_API_MAPPING`로 설정되며 다음 라우팅 규칙 및 API 매핑을 포함합니다.


|  규칙 ID  |  우선순위  |  조건  |  작업  | 
| --- | --- | --- | --- | 
| `abc123` |  1  |  요청에 `pets` 헤더가 포함된 경우  |  `PetStore` API의 `Prod` 스테이지를 간접적으로 호출합니다. | 
| `000zzz` |  5  |  요청에 `Cookie` 및 `*ux=beta*` 헤더가 포함되어 있으며 기본 경로에 `/refunds`가 포함된 경우 |  `Refunds` API의 `Beta` 스테이지를 간접적으로 호출합니다. | 

다음 표에는 `https://petstore.backup.example.com`에 대한 API 매핑이 나와 있습니다.


|  API 매핑  |  선택한 API  | 
| --- | --- | 
|  `/refunds`  |  `Refunds` API의 `Prod` 스테이지를 간접적으로 호출합니다. | 
|  `(none)`  |  `Search` API의 `Prod` 스테이지를 간접적으로 호출합니다. | 

다음 다이어그램은 API Gateway가 이전 라우팅 규칙 및 API 매핑을 예제 요청에 적용하는 방법을 보여줍니다. 예제 요청은 이 다이어그램 뒤의 표에 요약되어 있습니다.

![API Gateway가 이전 라우팅 규칙 및 API 매핑을 적용하는 방법을 보여주는 다이어그램입니다.](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/images/rr-diagram.png)


다음 표는 API Gateway가 이전 라우팅 규칙 및 API 매핑을 예제 요청에 적용하는 방법을 보여줍니다.


| 요청 | 선택한 API | 설명 | 
| --- | --- | --- | 
| `https://petstore.diagram.com/pets` | `PetStore` API 스테이지의 `Prod` 이름입니다. | 요청은 라우팅 규칙 `abc123`과 일치합니다. | 
| `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"` | `Refunds` API 스테이지의 `Beta` 이름입니다. | 요청은 라우팅 규칙 `000zzz`과 일치합니다. `Cookie` 헤더에는 이 조건에 대한 올바른 `*contains*` 일치 및 기본 경로 일치가 포함됩니다. | 
| `https://petstore.diagram.example.com/refunds` | `Refunds` API 스테이지의 `Prod` 이름입니다. | 요청에 라우팅 규칙 `zzz000`과 일치하는 데 필요한 헤더가 없습니다. API Gateway가 라우팅 규칙과 성공적으로 일치되지 않는 경우 API 매핑으로 대체됩니다. API Gateway는 기본 경로를 `Refunds` API의 `Prod` 스테이지에 매핑할 수 있습니다. | 
| `https://petstore.diagram.example.com/` | `Search` API 스테이지의 `Prod` 이름입니다. | 요청은 API 매핑을 빈 경로 `(none)`과 일치시킵니다. | 

## 예제 3: 여러 수준의 라우팅 규칙 및 API 매핑
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

이 예제에서 사용자 지정 도메인 이름 `https://petstore.backup.example.com`의 라우팅 모드는 `ROUTING_RULE_THEN_API_MAPPING`로 설정되며 다음 라우팅 규칙 및 API 매핑을 포함합니다.

다음 표에는 `https://petstore.backup.example.com`에 대한 라우팅 규칙이 나와 있습니다.


|  규칙 ID  |  우선순위  |  조건  |  작업  | 
| --- | --- | --- | --- | 
| `abc123` |  10  |  요청에 `Hello:World` 헤더가 포함된 경우  |  대상 API 1  | 
| `000zzz` |  50  |  요청에 `Accept`, `image/webp` 및 `Pet:Dog-*` 헤더가 포함되어 있으며 기본 경로에 `PetStoreShopper`가 포함된 경우 | 대상 API 2 | 

다음 표에는 `https://petstore.backup.example.com`에 대한 API 매핑이 나와 있습니다.


|  API 매핑  |  선택한 API  | 
| --- | --- | 
|  `PetStoreShopper`  |  대상 API 3  | 
|  `PetStoreShopper/cats`  |  대상 API 4  | 

다음 표는 API Gateway가 이전 라우팅 규칙 및 API 매핑을 예제 요청에 적용하는 방법을 보여줍니다.


| 요청 | 선택한 API | 설명 | 
| --- | --- | --- | 
| `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" ` | 대상 API 3 | 요청에 라우팅 규칙 `zzz000`과 일치하는 데 필요한 헤더가 없습니다. API Gateway가 라우팅 규칙과 성공적으로 일치되지 않는 경우 API 매핑으로 대체됩니다. API Gateway는 기본 경로를 대상 API 3에 매핑할 수 있습니다. | 
| `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"` | 대상 API 1 | 요청은 라우팅 규칙 `abc123`과 일치합니다. 라우팅 모드가 `ROUTING_RULE_THEN_API_MAPPING`으로 설정된 경우 라우팅 규칙은 항상 API 매핑보다 우선 적용됩니다. | 
| `https://petstore.example.com/Admin -h "Pet:Dog-Bella"` | 없음 | 요청이 라우팅 규칙 또는 API 매핑과 일치하지 않습니다. 기본 라우팅 규칙이 없으므로 API Gateway는 호출을 거부하고 호출자에게 `403 Forbidden` 상태 코드를 보냅니다. | 

## 예제 4: 와일드카드 도메인 이름에 대한 라우팅 규칙
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

이 예제에서 사용자 지정 도메인 이름 `https://*.example.com`은 와일드카드 도메인 이름입니다. 와일드카드는 동일한 도메인으로 다시 라우팅되는 모든 하위 도메인을 지원합니다. 다음 예제 라우팅 규칙은 하위 도메인이 `Host` 헤더를 사용하여 다른 대상 API로 라우팅할 수 있도록 이 동작을 변경합니다.

다음 표에는 `https://*.example.com`에 대한 라우팅 규칙이 나와 있습니다.


|  규칙 ID  |  우선순위  |  조건  |  작업  | 
| --- | --- | --- | --- | 
| `abc123` |  10  |  요청에 `Host:a.example.com` 헤더가 포함된 경우  |  대상 API 1  | 
| `000zzz` |  50  |  요청에 `Host:b.example.com` 헤더가 포함된 경우 | 대상 API 2 | 
| `efg456` |  500  | 없음 | 대상 API 3 | 

다음 표는 API Gateway가 이전 라우팅 규칙을 예제 요청에 적용하는 방법을 보여줍니다.


| 요청 | 선택한 API | 설명 | 
| --- | --- | --- | 
| `https://a.example.com` | 대상 API 1 | `Host` 헤더는 `a.example.com`입니다. 이 요청은 라우팅 규칙 `abc123`과 일치합니다. | 
| `https://b.example.com` | 대상 API 2 | `Host` 헤더는 `b.example.com`입니다. 이 요청은 라우팅 규칙 `000zzz`과 일치합니다. | 
| `https://testing.example.com` | 대상 API 3 | 이는 catch-all 라우팅 규칙 `efg456`과 일치합니다. | 