Skip to content

otk-final/openapi-codegen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenApi (Swagger)接口代码生成器

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 image
Typescript image
Go image
Swift image
Python image
Kotlin image
C# image
Rust image

image

image

Feature

  • 支持v2/v3文档格式
  • 支持语言:tsswiftkotlinjavapythongo, rust, c#
  • 支持泛型
  • 支持自定义模版

Install

源码编译

go build -o openapi

Download - 1.0.2

安装并添加到环境变量

Tutorial

start

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

init

openapi init

在当前目录下生成openapi.json配置文件

reload

#默认当前目录下 openapi.json
openapi reload

#自定义文件路径
openapi reload -f /app/openapi.json

根据openapi.json配置文件重新生成接口代码,默认全部

#指定name 或者 language
openapi reload -f /app/openapi.json -n ts

Configuration File

[{
    "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泛型声明:属性~ ,采用 ~ 符号
  • 内置模版文件:模版文件

Example

server端

openapi-server

client端

ts

go

java

kotlin

swift

python

c#

rust

About

openapi(swagger)代码生成器

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published