API网关支持导入OAS 2.0和OAS3.0格式(详见OpenAPI Specification)的API定义,帮助用户快速将现有系统的API接入网关。API网关既支持标准OAS格式的API定义的导入、也支持OAS定义扩展后的API定义导入。
导入标准OAS格式的API定义
主要包括如下过程:
选择目标分组和全局信息。
录入OAS 2.0格式的API定义,或OAS 3.0格式的API定义
进行预检并根据检查结果进行调整。
执行导入。
导入完成后,会在目标分组中创建对应的API,后续还需进行“发布到目标环境”、“接口调试”等过程,这些过程详见API 调试。
登录API网关控制台。
在控制台左侧菜单中,选择API 管理 > API列表。
在API列表页面中,单击右侧导入Swagger按钮。
在弹出框中选择导入方式,选择标准OAS导入,进入配置页面。
基本信息。主要是选择导入的目标分组。
参数
描述
导入的分组
导入的目标分组。
重要如果使用OAS 2.0导入时,目标API分组的basepath(例如创建分组)需要与OAS定义中的basepath(OAS的basePath定义)保持一致,否则将无法导入。
是否覆盖
当选择覆盖时:如果遇到请求路径和HTTP请求冲突时,自动覆盖(更新)原有API;
当不选择覆盖时:如果遇到请求路径和HTTP请求冲突时,返回错误提示API已经存在。
API定义版本
当前支持OAS 2.0和OAS 3.0的导入方式。
(可选)全局配置。设置能够API的通用信息。
参数
描述
后端服务
默认的后端类型都为Mock类型,可以指定API网关上创建的HTTP、VPC、混合、服务发现类型的后端服务(使用后端服务提高管理效率)。
入参请求模式
默认的方式为参数透传,可以选择参数透传/参数映射。
说明如果入参请求模式为透传模式,API定义中的参数定义只会录入path参数,query,header,formdata,body等参数将会忽略。
API认证方式
默认的方式为阿里云APP,可以选择阿里云APP/无认证。
说明后端服务,参数透传,API认证为全局配置,一经配置将对所有API生效;但是如果OAS定义中使用了API网关支持的扩展字段来声明这些配置,优先级顺序为:OAS中API定义,OAS中全局定义,选填的全局配置。扩展字段将在后文进行说明。
AppCode认证:安全认证模式为APP认证时,AppCode认证默认为禁止AppCode认证;签名算法:默认为HMAC_SHA256。
API定义。确定计划导入的OAS定义内容,支持文本和OSS链接两种方式:
重要当前两种方式都最多支持同时导入100个API定义。
文本。支持填入yaml或json格式的API定义内容。通过文本填入的定义内容,最大支持256KB。
OSS链接。支持填写一个OSS文件地址,文件类型需为json或者yaml,且OSS地址需要允许匿名访问。此方式下不限制文件大小。
其他默认信息。导入API时需要的信息,但并未在配置页面中提供设置,默认值如下:
默认信息
描述
防止重放攻击
未开启。
禁止公网访问
未开启。
允许上架云市场
未开启。
单击预检按钮,系统将会对计划导入的内容进行检查,检测出OAS定义中的API定义和模型定义,以及告警和错误信息。
说明警告信息:警告信息可以在导入的时候选择忽略,但是存在警告信息的API定义部分在导入的过程中会被忽略;
错误信息:错误信息不可忽略,错误信息必须进行订正,不订正进行导入会直接抛出异常。
预检过程中没有错误信息和警告信息(或者忽略警告信息之后),可执行导入。单击导入Swagger按钮,系统真正开始导入API,导入API需要一定时间,导入过程请勿关闭浏览器。
待系统执行完毕后,可查看到API导入结果。
标准OAS2.0格式与API网关的对应
本章节重点介绍OAS 2.0的格式定义与API网关的API定义有对应的映射字段,对于没有对应映射的OAS中的定义,不会影响API的导入。
Swagger Object:
BasePath:对应分组的BasePath,导入时需要认证;
Schemes:对应API定义中请求部分支持的协议;
Path Item Object:
Path:对应API定义中请求部分的请求path;
Method:对应API定义中请求部分的Method,支持GET,POST,PUT,HEAD,DELETE,PATCH,OPTIONS;
Operation Object:
Summary:对应API定义的描述;
OperationId:对应API定义的API名称,如果存在扩展字段“x-aliyun-apigateway-api-name”则使用扩展字段中的内容作为API的名称;
Schemes:对应API定义中请求部分支持的协议,优先级高于Swagger Object中的定义;
Parameter Object:
Name:对应API定义中请求部分的参数名称;
In:对应API定义中请求部分的参数位置,支持path,query,head,formdata;
Description:对应API定义中请求部分的参数描述;
Required:对应API定义中请求部分的参数是否必填;
Type:对应API定义中请求部分的参数类型;
query,path,head类型的参数支持string,number,integer,boolean,array;
formdata类型的参数支持string,number,integer,boolean,array和file;
Format:对应API定义中请求部分的参数类型,如果Format存在,Format定义优先级高于Type类型。
OAS参数类型与API网关参数类型的映射关系:
OAS定义参数类型
API网关参数定义类型
String
String
Boolean
Boolean
Array
Array
Int32
Int
Int64
Long
Double
Double
Float
Float
File
File
说明如果API定义的入参请求模式为透传模式,API定义中的参数定义只会录入path参数,query,header,formdata,body等参数将会忽略;
如果API定义的入参请求模式为透传模式,没有使用API网关扩展字段的情况下,API定义中请求部分和后端服务部分的请求方法,请求路径,参数定义保持一致;
对于body位置的参数,如果参数类型为引用类型,不会在API网关的API定义中体现,只会在生成文档的时候体现。
Response Object:
HTTP Status Code:对应API定义中定义返回结果中错误码定义中的错误码;
Description:对应API定义中定义返回结果中错误码定义中的描述;
Schema:对应API定义中定义返回结果中错误码定义中的模型;
Definitions Object:
该项定义中的对象,在导入的过程中,API网关会将模型创建在分组下,查看模型定义可以通过分组管理列表下,对应分组的操作栏中的模型管理查看。
OAS 2.0格式定义举例,如下为PetStore的接口定义,帮助您快速了解本功能。
swagger: "2.0" info: version: "1.0.0" title: "Swagger Petstore 2.0" basePath: "/" schemes: - "https" - "http" paths: /pet/findByStatus: get: tags: - "pet" summary: "Finds Pets by status" operationId: "findPetsByStatus" parameters: - name: "status" in: "query" required: true type: "array" items: type: "string" enum: - "available" - "pending" - "sold" default: "available" collectionFormat: "multi" responses: "200": description: "successful operation" schema: type: "array" items: $ref: "#/definitions/Pet" "400": description: "Invalid status value" definitions: Category: type: "object" properties: id: type: "integer" format: "int64" name: type: "string" Tag: type: "object" properties: id: type: "integer" format: "int64" name: type: "string" Pet: type: "object" required: - "name" - "photoUrls" properties: id: type: "integer" format: "int64" category: $ref: "#/definitions/Category" name: type: "string" example: "doggie" photoUrls: type: "array" items: type: "string" tags: type: "array" items: $ref: "#/definitions/Tag" status: type: "string" description: "pet status in the store" enum: - "available" - "pending" - "sold"
标准OAS3.0格式与API网关的对应
本章节重点介绍OAS 3.0的格式定义与API网关的API定义有对应的映射字段,对于没有对应映射的OAS中的定义,不会影响API的导入。
Path Item Object
Path:对应API定义中请求部分的请求path;
Method:对应API定义中请求部分的Method,支持GET,POST,PUT,HEAD,DELETE,PATCH,OPTIONS;
Operation Object
Summary:对应API定义的描述;
OperationId:对应API定义的API名称,如果存在扩展字段“x-aliyun-apigateway-api-name”则使用扩展字段中的内容作为API的名称;
Parameter Object
Name:对应API定义中请求部分的参数名称;
In:对应API定义中请求部分的参数位置,支持path,query,head,formdata;
Required:对应API定义中请求部分的参数是否必填;
Schema Object:
Description:对应API定义中请求部分的参数描述;
Type:对应API定义中请求部分的参数类型;
query,path,head类型的参数支持string,number,integer,boolean,array;
formdata类型的参数支持string,number,integer,boolean,array和file;
Format:对应API定义中请求部分的参数类型,如果Format存在,Format定义优先级高于Type类型。
Request Body Object
Content:
application/x-www-form-urlencoded:对应API定义中的formdata类型的参数;
application/json:该项定义中的对象,在导入的过程中,API网关会将模型创建在分组下,查看模型定义可以通过分组管理列表下,对应分组的操作栏中的模型管理查看。
Responses Object
HTTP Status Code:对应API定义中定义返回结果中错误码定义中的错误码;
Description:对应API定义中定义返回结果中错误码定义中的描述;
Content:对应API定义中定义返回结果中错误码定义中的模型;
OAS 3.0格式定义举例,如下为PetStore的接口定义,帮助您快速了解本功能。
openapi: 3.0.0 info: title: Swagger Petstore - OpenAPI 3.0 version: 1.0.0 paths: /pet: put: tags: - pet summary: Update an existing pet description: Update an existing pet by Id operationId: updatePet requestBody: description: Update an existent pet in the store content: application/json: schema: $ref: '#/components/schemas/Pet' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Pet' required: true responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/Pet' '400': description: Invalid ID supplied '404': description: Pet not found '422': description: Validation exception post: tags: - pet summary: Add a new pet to the store description: Add a new pet to the store operationId: addPet requestBody: description: Create a new pet in the store content: application/json: schema: $ref: '#/components/schemas/Pet' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Pet' required: true responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/Pet' '400': description: Invalid input '422': description: Validation exception /pet/findByStatus: get: tags: - pet summary: Finds Pets by status description: Multiple status values can be provided with comma separated strings operationId: findPetsByStatus parameters: - name: status in: query description: Status values that need to be considered for filter required: false explode: true schema: type: string default: available enum: - available - pending - sold responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Pet' application/xml: schema: type: array items: $ref: '#/components/schemas/Pet' '400': description: Invalid status value components: schemas: Category: type: object properties: id: type: integer format: int64 example: 1 name: type: string example: Dogs xml: name: category Tag: type: object properties: id: type: integer format: int64 name: type: string xml: name: tag Pet: required: - name - photoUrls type: object properties: id: type: integer format: int64 example: 10 name: type: string example: doggie category: $ref: '#/components/schemas/Category' photoUrls: type: array xml: wrapped: true items: type: string xml: name: photoUrl tags: type: array xml: wrapped: true items: $ref: '#/components/schemas/Tag' status: type: string description: pet status in the store enum: - available - pending - sold xml: name: pet
导入具有API网关扩展字段的OAS格式定义
详见导出标准OAS定义。