

# 设置 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 功能将仅使用第一个变量作为基本路径。

## 忽略
<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 映射不包含*基础路径*和表示生产阶段的*阶段*值，则可以使用这一选项。

**注意**  
 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 中使用的阶段名称，则可以使用这一选项。