

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

# 設定 OpenAPI `basePath` 屬性
<a name="api-gateway-import-api-basePath"></a>

在 [OpenAPI 2.0](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md) 中，您可以使用 `basePath` 屬性來提供 `paths` 屬性中所定義之每個路徑之前的一或多個路徑部分。由於 API Gateway 表達資源路徑的方式有幾種，因此匯入 API 功能會在匯入期間提供下列選項來解譯 `basePath` 屬性：ignore、prepend 和 split。

在 [https://swagger.io/docs/specification/api-host-and-base-path/](https://swagger.io/docs/specification/api-host-and-base-path/) 中，`basePath` 不再是頂層屬性。相反地，API Gateway 會使用[伺服器變數](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#serverVariableObject)做為慣例。匯入 API 功能會提供相同選項，以在匯入期間解譯基本路徑。基本路徑會依下列所述進行識別：
+ 如果 API 未包含任何 `basePath` 變數，則匯入 API 功能會檢查 `server.url` 字串，以查看其是否包含超過 `"/"` 的路徑。若是，該路徑會用作基本路徑。
+ 如果 API 只包含一個 `basePath` 變數，則匯入 API 功能會使用它，做為基本路徑，即使未在 `server.url` 中參考它也一樣。
+ 如果 API 包含多個 `basePath` 變數，則匯入 API 功能只會使用第一個變數，做為基本路徑。

## Ignore
<a name="api-gateway-import-api-basePath-ignore"></a>

如果 OpenAPI 檔案具有 `basePath` 的 `/a/b/c` 值，而且 `paths` 屬性包含 `/e` 與 `/f`，則下列 `POST` 或 `PUT` 請求：

```
POST /restapis?mode=import&basepath=ignore
```



```
PUT /restapis/api_id?basepath=ignore
```

 會導致 API 中的下列資源：
+ `/`
+ `/e`
+ `/f`

 結果是將 `basePath` 視為不存在，並提供與主機相關之所有已宣告的 API 資源。例如，當您有自訂網域名稱，其 API 映射未包含 *Base Path (基底路徑)* 以及參考您生產階段的 *Stage (階段)* 值，就可以使用此選項。

**注意**  
 API Gateway 會自動為您建立根資源，即使您的定義檔中沒有明確宣告也一樣。

 未指定時，`basePath` 預設會採用 `ignore`。

## 前綴
<a name="api-gateway-import-api-basePath-prepend"></a>

 如果 OpenAPI 檔案具有 `basePath` 的 `/a/b/c` 值，而且 `paths` 屬性包含 `/e` 與 `/f`，則下列 `POST` 或 `PUT` 請求：

```
POST /restapis?mode=import&basepath=prepend
```



```
PUT /restapis/api_id?basepath=prepend
```

 會導致 API 中的下列資源：
+ `/`
+ `/a`
+ `/a/b`
+ `/a/b/c`
+ `/a/b/c/e`
+ `/a/b/c/f`

 結果是將 `basePath` 視為指定其他資源 (不含方法)，並將其新增至已宣告的資源集。例如，當不同小組負責 API 的不同組件，而且 `basePath` 可能參考每個小組之 API 組件的路徑位置時，就可以使用此選項。

**注意**  
 API Gateway 會自動為您建立中繼資源，即使您的定義中沒有明確宣告也一樣。

## Split
<a name="api-gateway-import-api-basePath-split"></a>

 如果 OpenAPI 檔案具有 `basePath` 的 `/a/b/c` 值，而且 `paths` 屬性包含 `/e` 與 `/f`，則下列 `POST` 或 `PUT` 請求：

```
POST /restapis?mode=import&basepath=split
```



```
PUT /restapis/api_id?basepath=split
```

 會導致 API 中的下列資源：
+ `/`
+ `/b`
+ `/b/c`
+ `/b/c/e`
+ `/b/c/f`

 結果是將最上層的路徑部分 `/a` 視為每個資源路徑的開頭，並在 API 本身內建立其他資源 (不含方法)。例如，當 `a` 是您要公開為 API 一部分的階段名稱時，就可以使用此選項。