This is a tool that generates API call code in various programming languages based on the content of an OpenAPI document.
根据openapi (swagger) 文档生成不同编程语言客户端接口代码
Language | Demo |
---|---|
Java | ![]() |
Typescript | ![]() |
Go | ![]() |
Swift | ![]() |
Python | ![]() |
Kotlin | ![]() |
C# | ![]() |
Rust | ![]() |
- 支持
v2
/v3
文档格式 - 支持语言:
ts
,swift
,kotlin
,java
,python
,go
,rust
,c#
- 支持泛型
- 支持自定义模版
源码编译
go build -o openapi
安装并添加到环境变量
openapi start -h
Quick start
Usage:
start [flags]
Flags:
-e, --endpoint string example:https://{server}:{port}/v3/api-docs
-h, --help help for start
-l, --lang string kotlin,python,ts,typescript,swift,java,go,golang,rust,cs(c#)
-v, --version string openapi version (default "v3")
例子
openapi -l ts -v v3 -e http://localhost:8080/v3/api_docs
openapi -l kotlin -v v2 -e http://localhost:8080/v2/api_docs
openapi init
在当前目录下生成openapi.json配置文件
#默认当前目录下 openapi.json
openapi reload
#自定义文件路径
openapi reload -f /app/openapi.json
根据openapi.json
配置文件重新生成接口代码,默认全部
#指定name 或者 language
openapi reload -f /app/openapi.json -n ts
[{
"name:"server_name",
//openapi 文档地址
"endpoint": "http://localhost:8083/v3/api-docs",
//目标语言
"lang": "ts",
//openapi 版本
"version": "v3",
//输出文件 - 可自定义,系统仅内置(api,model,client)
"output": {
// api 模版
"api": {
//输出文件 文件头
"header": [
"package demo.api;",
"",
"import demo.model.*;",
"import demo.ApiClient;"
],
//自定义模版路径
"template": "custom.tmpl",
//输出文件路径
"file": "src/main/java/demo/api/{api}.java",
// 自定义变量 - 继承全局变量
"variables": {
"k1": "k2"
}
},
// api 模版
"client": {
"file": "src/main/java/demo/ApiClient.java"
},
"model": {
"file": "src/main/java/demo/model/{model}.java"
}
},
//忽略路径
"ignore": ["/error","/v3/"],
//匹配路径
"filter": ["/user/"],
//别名 - 当目标语言遇到语法关键词冲突时使用
"alias": {
//属性别名
"properties": {
"JsonNode":"any"
},
//结构体别名
"models": {
"User":"People"
},
//类型别名
"types": {
//自定义数据类型
"string": "CustomString",
//format 自定义数据类型
"interge+int64": "CustomLong"
},
//参数别名
"parameters": {
"export": "output"
}
},
//模版全局变量
"variables": {
"name": "value"
},
//泛型
"generics": {
//是否开启
"enable": true,
//是否展开Root包装类型
"unfold": false,
//泛型表达式
"expressions": {
//单一类型 - ApiResult<T>{... T data ...}
"ApiResult": [
"data"
],
//集合类型 - PageData<T>{... List<T> entities ...}
"PageData": [
"entities+"
],
//Map类型 - Map<String,T>{... T data ...}
"MapResult": [
"data~"
],
//复合泛型 - KVPair<T,V> {... T key,V value ...}
"KVPair": [
"key",
"value"
]
}
},
// 解决 openapi重复operation_id 导出带数字的方法名: batch_12 => batch
"repeatable_operation_id": true
}]
- openapi文档规范中不支持泛型,泛型表达式需在配置文件中预声明
- 当server端采用统一标准泛型结构返回时,如:
ApiResult<T>
时,可开启generics.unfold
参数,业务方法可以直接获取T
- 集合泛型声明:
属性+
,采用+
符号 - Map泛型声明:
属性~
,采用~
符号 - 内置模版文件:模版文件