概述
网关支持将API分组下的API按照OAS2.0和OAS3.0的格式导出,方便用户实现跨账号,跨地域间甚至跨平台的数据迁移。
OpenAPI 规范(OAS),是定义一个标准的、与具体编程语言无关的RESTful API的规范。
导出标准OAS格式的API定义
网关目前支持两种API导出方式
通过分组导出API定义
- 进入 API 托管->分组管理 菜单页。
- 点击 导出API定义 按钮 ,在弹出框中指定导出的数据格式,环境以及是否需要 导出API网关拓展定义 。
- 点击导出按钮后浏览器会下载API定义压缩包.
直接批量导出API定义
- 进入 API 托管->API管理 菜单页。
- 批量勾选API后在批量操作下拉框中点击导出API定义 按钮 ,在弹出框中指定导出的数据格式,环境以及是否需要 导出API网关拓展定义 。
- 点击导出按钮后浏览器会下载API定义压缩包.
注意批量导出API定义时仅支持导出同一个分组下的API
API扩展定义字段
如果在导出OAS规范的定义中选择了导出API网关扩展字段,在导出的API定义文件中会添加网关的扩展字段。扩展属性被设计为总是以 "x-" 为前缀的模式字段,此字段的值可以是 null、原始类型、数组或对象。可以包含任意有效的 JSON 格式的值。
扩展字段 | OAS中位置 | 说明 | 类型 |
---|---|---|---|
x-ctyun-apigateway-api-name | Operation | API名称 | String |
x-ctyun-apigateway-is-anti-replay | Operation | 是否设置防重放攻击 | Boolean |
x-ctyun-apigateway-backend | Operation | 后端服务定义 | Object |
x-ctyun-apigateway-common-parameters | Operation | 常量参数定义 | Object |
x-ctyun-apigateway-system-parameters | Operation | 系统参数定义 | Object |
x-ctyun-apigateway-request-argument-mode | Operation | 入参请求模式 | String |
x-ctyun-apigateway-response-messages | Responses | 错误码错误信息 | String |
x-ctyun-apigateway-parameter-demo | Parameter | 参数定义示例值 | String |
x-ctyun-apigateway-backend-location | Parameter | 后端服务参数映射位置 | String |
x-ctyun-apigateway-backend-name | Parameter | 后端服务参数映射名称 | String |
x-ctyun-apigateway-success-demo | Operation | 返回结果示例 | String |
x-ctyun-apigateway-failed-demo | Operation | 失败结果示例 | String |
x-ctyun-apigateway-request-body-schema | Operation | 请求body引用的模型名 | String |
x-ctyun-apigateway-request-body-description | Operation | 请求body内容描述 | String |
说明
导出OAS2格式的定义时,会导出分组的base path;
每次可以导出的API数量限制为50个API;
分组模型管理里中定义的模型定义如果无法解析,导出的内容中将不包含模型定义;
以API为单位导出时,所有勾选的API会导出到一个文件中;
未勾选导出API网关扩展字段时,导出OAS文件中的OperationId为API定义的请求path和请求method的拼接后的字符串,如“export1ByGET”;
勾选导出API网关扩展字段后,在API网关定义API以外的内容,如绑定的插件、授权的APP、分组的域名、后端服务在各环境上的定义等,均不会被导出。
API导出样例
以下是一个OAS2版本的导出定义示例:
{
"swagger" : "2.0",
"info" : {
"description" : "Export from api group group4",
"version" : "1.0.0",
"title" : "Ctyun Gateway API"
},
"basePath" : "/user1",
"paths" : {
"/uhe/:c" : {
"post" : {
"summary" : "",
"operationId" : "uhecByPOST",
"schemes" : [ "http", "https" ],
"parameters" : [ {
"name" : "a",
"in" : "query",
"description" : "",
"required" : false,
"type" : "string",
"x-ctyun-apigateway-parameter-demo" : "1",
"x-ctyun-apigateway-backend-location" : "query",
"x-ctyun-apigateway-backend-name" : "a"
}, {
"name" : "b",
"in" : "header",
"description" : "",
"required" : false,
"type" : "string",
"x-ctyun-apigateway-parameter-demo" : "2",
"x-ctyun-apigateway-backend-location" : "header",
"x-ctyun-apigateway-backend-name" : "b"
}, {
"name" : "c",
"in" : "path",
"description" : "",
"required" : false,
"type" : "string",
"x-ctyun-apigateway-parameter-demo" : "test",
"x-ctyun-apigateway-backend-location" : "path",
"x-ctyun-apigateway-backend-name" : "change"
} ],
"x-ctyun-apigateway-request-argument-mode" : "PASS",
"x-ctyun-apigateway-common-parameters" : [ {
"paramName" : "num",
"paramValue" : "2",
"paramLocation" : "query",
"description" : ""
} ],
"x-ctyun-apigateway-api-name" : "testaa-clone-clone",
"x-ctyun-apigateway-system-parameters" : [ ],
"x-ctyun-apigateway-backend" : {
"gwServiceCode" : "ea180dd257714a56af39d3408fdf072b",
"postPath" : "/ko/[change]/",
"postMethod" : "POST",
"timeout" : 10000.0
},
"x-ctyun-apigateway-is-anti-replay" : false
}
},
"definitions" : {
"schema3" : {
"type" : "object",
"required" : [ "name" ],
"properties" : {
"id" : {
"type" : "integer",
"format" : "int32"
},
"name" : {
"type" : "string"
},
"status" : {
"type" : "string"
},
"dogProject" : {
"type" : "object",
"properties" : {
"name" : {
"type" : "string"
},
"id" : {
"type" : "integer",
"format" : "int32"
}
}
}
}
}
}
}