

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# API Gateway 中 REST API 的 API 端點類型
<a name="api-gateway-api-endpoint-types"></a>

*[API 端點](api-gateway-basic-concept.md#apigateway-definition-api-endpoints)* 類型是指 API 的主機名稱。根據您大部分 API 流量的來源而定，API 端點類型可以是*邊緣最佳化*、*區域*或*私有*。

## 邊緣最佳化的 API 端點
<a name="api-gateway-api-endpoint-types-edge-optimized"></a>

*[邊緣最佳化 API 端點](api-gateway-basic-concept.md#apigateway-definition-edge-optimized-api-endpoint)*通常會將請求路由至最靠近的 CloudFront 連接點 (POP)，該連接點可在您的用戶端分散各地的情況下提供協助。這是 API Gateway REST API 的預設端點類型。

邊緣最佳化 API 會提供 [HTTP 標頭](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)的名稱 (例如，`Cookie`)。

CloudFront 依據 Cookie 名稱以自然順序排序 HTTP Cookie，然後將請求轉送到原始伺服器。如需 CloudFront 處理 Cookie 方式的詳細資訊，請參閱[根據 Cookie 快取內容](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html)。

針對邊緣最佳化 API，您使用的任何自訂網域名稱適用於所有區域。

## 區域 API 端點
<a name="api-gateway-api-endpoint-types-regional"></a>

*[區域 API 端點](api-gateway-basic-concept.md#apigateway-definition-regional-api-endpoint)*適用於相同區域中的用戶端。當 EC2 執行個體上執行的用戶端呼叫相同區域中的 API 時，或當 API 是為了提供服務給具有高需求的少量用戶端時，區域 API 可降低連線成本。

針對區域 API，您使用的任何自訂網域名稱都是專屬於 API 部署所在的區域。如果您在多個區域中部署區域 API，其可在所有區域中擁有相同的自訂網域名稱。您可以使用自訂網域搭配 Amazon Route 53 來執行任務，例如[以延遲為基礎的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency)。如需詳細資訊，請參閱[在 API Gateway 中設定區域性自訂網域名稱](apigateway-regional-api-custom-domain-create.md)及[設定 API Gateway 中的邊緣最佳化的自訂網域名稱](how-to-edge-optimized-custom-domain-name.md)。

所有區域和 API 端點會依原狀傳遞所有標頭名稱。

**注意**  
如果地理上 API 用戶端分散各處，則使用區域 API 端點與自己的 Amazon CloudFront 分佈搭配，以確保 API Gateway 不會將 API 與服務控制的 CloudFront 分佈建立關聯，這樣做可能仍有意義。如需此使用案例的詳細資訊，請參閱[如何設定 API Gateway 與自己的 CloudFront 分佈搭配？](https://repost.aws/knowledge-center/api-gateway-cloudfront-distribution)。

## 私有 API 端點
<a name="api-gateway-api-endpoint-types-private"></a>

*[私有 API 端點](api-gateway-basic-concept.md#apigateway-definition-private-api-endpoint)*是僅能從 Amazon Virtual Private Cloud (VPC) 透過界面 VPC 端點存取的 API 端點；此端點是您在 VPC 中建立的端點網路界面 (ENI)。如需更多詳細資訊，請參閱 [API Gateway 中的私有 REST API](apigateway-private-apis.md)。

所有私有 API 端點會依原狀傳遞所有標頭名稱。

# 在 API Gateway 中變更公有或私有 API 端點類型
<a name="apigateway-api-migration"></a>

變更 API 端點類型需要您更新 API 的組態。您可以使用 API Gateway 主控台、 AWS CLI或適用於 API Gateway 的 AWS SDK 變更現有的 API 類型。無法再次變更其端點類型，直到目前變更完成為止。

支援下列端點類型的變更：
+ 從邊緣最佳化變更為區域性或私有
+ 從區域性變更為邊緣最佳化或私有
+ 從私有改為區域性

您不能將私有 API 改為邊緣最佳化 API。

請注意，如果您要將公有 API 從邊緣最佳化變更為區域性 (反之亦然)，邊緣最佳化的 API 的行為可能與區域 API 的行為不同。例如，邊緣最佳化 API 會移除 `Content-MD5` 標頭。任何傳送到後端的 MD5 雜湊值都可以請求字串參數或內文屬性表示。不過，區域 API 仍會傳送此標頭，雖然此標頭名稱可能會重新映射到其他一些名稱。了解其中差異有助於決定如何將邊緣最佳化的 API 更新為區域 API，或將區域 API 更新為邊緣最佳化的 API。

**Topics**
+ [使用 API Gateway 主控台變更 API 端點類型](#migrate-api-using-console)
+ [使用 AWS CLI 變更 API 端點類型](#migrate-api-using-aws-cli)

## 使用 API Gateway 主控台變更 API 端點類型
<a name="migrate-api-using-console"></a>

若要為您的 API 變更 API 端點類型，請執行下列任一組步驟：

**將端點從區域或邊緣最佳化轉換為公有 (以及反向轉換)**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選擇 REST API。

1. 選擇 **API 設定**。

1. 在 **API 詳細資訊**區段中，選擇**編輯**。

1. 對於 **API 端點類型**，選取**邊緣最佳化**或**區域**。

1. 選擇**儲存變更**。

1. 重新部署您的 API，變更才會生效。

**將私有端點轉換為區域端點**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選擇 REST API。

1. 編輯您的 API 資源政策，以移除任何提及的 VPC 或 VPC 端點；如此一來，從您的 VPC 內、外部進行的 API 呼叫將可成功。

1. 選擇 **API 設定**。

1. 在 **API 詳細資訊**區段中，選擇**編輯**。

1. 對於 **API 端點類型**，選取**區域**。

1. 選擇**儲存變更**。

1. 從您的 API 移除資源政策。

1. 重新部署您的 API，變更才會生效。

   由於您要將端點類型從私有移轉至區域，因此 API Gateway 會將 IP 位址類型變更為 IPv4。如需詳細資訊，請參閱[API Gateway 中 REST API 的 IP 位址類型](api-gateway-ip-address-type.md)。

**將區域端點轉換為私有端點**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選擇 REST API。

1. 建立授予 VPC 或 VPC 端點存取權的資源政策。如需詳細資訊，請參閱[步驟 3：為私有 API 設定資源政策](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy)。

1. 選擇 **API 設定**。

1. 在 **API 詳細資訊**區段中，選擇**編輯**。

1. 針對 **API 端點類型**，選取**私有**。

1. (選用) 針對 **VPC 端點 ID**，選取您要與私有 API 建立關聯的 VPC 端點 ID。

1. 選擇**儲存變更**。

1. 重新部署您的 API，變更才會生效。

   由於您要將端點類型從區域移轉至私有，因此 API Gateway 會將 IP 位址類型變更為雙堆疊。如需詳細資訊，請參閱[API Gateway 中 REST API 的 IP 位址類型](api-gateway-ip-address-type.md)。

## 使用 AWS CLI 變更 API 端點類型
<a name="migrate-api-using-aws-cli"></a>

以下 [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) 命令會將邊緣最佳化 API 更新為區域 API：

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/EDGE,value=REGIONAL
```

成功回應會有 `200 OK` 狀態碼與類似下列的承載：

```
{
    "createdDate": "2017-10-16T04:09:31Z",
    "description": "Your first API with Amazon API Gateway. This is a sample API that integrates via HTTP with our demo Pet Store endpoints",
    "endpointConfiguration": {
        "types": "REGIONAL"
    },
    "id": "a1b2c3",
    "name": "PetStore imported as edge-optimized"
}
```

以下 [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) 命令會將區域 API 更新為邊緣最佳化 API：

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/REGIONAL,value=EDGE
```

由於 [put-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-rest-api.html) 適用於更新 API 定義，因此不適用於更新 API 端點類型。