

# 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을 간접적으로 호출합니다. 요청 조건이 라우팅 규칙 `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`과 일치합니다.  | 