🧪 Skills

Swagger V2 Retrofit Generator

Generate Android Retrofit/Kotlin client code from Swagger v2 (OpenAPI 2.0) API documentation. Supports fetching Swagger docs via HTTP with no auth, Basic Aut...

v0.1.0
❤️ 0
⬇️ 52
👁 1
Share

Description


name: swagger-v2-retrofit-generator description: > Generate Android Retrofit/Kotlin client code from Swagger v2 (OpenAPI 2.0) API documentation. Supports fetching Swagger docs via HTTP with no auth, Basic Auth, Bearer Token, and API Key auth. Use when: (1) User needs to generate Retrofit Service interfaces from Swagger API, (2) User wants to create Kotlin data classes from Swagger definitions, (3) User needs to fetch Swagger v2 docs from a URL with authentication, (4) Converting Swagger API documentation to Android HTTP client code.

Swagger v2 Retrofit 代码生成器

从 Swagger v2 (OpenAPI 2.0) API 文档生成 Android Retrofit + Kotlin 客户端代码。

功能

  • 从 HTTP URL 获取 Swagger v2 API 文档
  • 支持无认证、Basic Auth、Bearer Token、API Key 认证方式
  • 生成 Retrofit Service 接口(Kotlin)
  • 生成数据类(Kotlin data class)

快速开始

获取 Swagger 文档

使用 scripts/fetch_swagger.py 获取 Swagger JSON:

# 无认证
python scripts/fetch_swagger.py http://api.example.com/v2/api-docs

# Basic 认证
python scripts/fetch_swagger.py http://api.example.com/v2/api-docs -u admin -p admin

# 保存到文件
python scripts/fetch_swagger.py http://api.example.com/v2/api-docs -u admin -p admin -o swagger.json

生成 Retrofit 代码

使用 scripts/generate_retrofit.py 生成代码:

# 从文件生成
python scripts/generate_retrofit.py swagger.json -p com.dkzsxt.ruizhidian.api -o ApiService.kt

# 从管道生成
python scripts/fetch_swagger.py http://api.example.com/v2/api-docs -u admin -p admin | \
  python scripts/generate_retrofit.py - -p com.example.api

完整示例

# 获取并生成代码(一步完成)
python scripts/fetch_swagger.py http://api.example.com/v2/api-docs \
  -u admin -p admin | \
  python scripts/generate_retrofit.py - \
  -p com.dkzsxt.ruizhidian.api \
  -s ApiService \
  -o app/src/main/java/com/dkzsxt/ruizhidian/api/ApiService.kt

指定接口生成

查看所有可用接口

# 列出所有接口
python scripts/generate_retrofit.py swagger.json --list

# 搜索包含 "picture" 的接口(搜索 path/summary/description/operationId/tags)
python scripts/generate_retrofit.py swagger.json --list --search picture

# 只在 path 中搜索
python scripts/generate_retrofit.py swagger.json --list --search getPictureDetail --search-field path

# 只在 summary 中搜索
python scripts/generate_retrofit.py swagger.json --list --search "绘本详情" --search-field summary

# 按 tag 列出接口
python scripts/generate_retrofit.py swagger.json --list --tag "绘本接口"

# 列出所有 tags
python scripts/generate_retrofit.py swagger.json --list-tags

生成指定接口

# 生成单个接口: POST /picture/getPictureDetailPage
python scripts/generate_retrofit.py swagger.json \
  --path /picture/getPictureDetailPage \
  --method POST \
  -o PictureDetailApi.kt

# 生成多个指定接口
python scripts/generate_retrofit.py swagger.json \
  --path /picture/getPictureDetailPage \
  --path /picture/getPictureList \
  --path /user/getUserInfo \
  -o SelectedApis.kt

# 生成 /picture/ 路径下的所有接口
python scripts/generate_retrofit.py swagger.json \
  --path "/picture/*" \
  -o PictureApis.kt

# 生成所有 POST 请求
python scripts/generate_retrofit.py swagger.json \
  --method POST \
  -o PostApis.kt

# 只生成必要的数据类(减少代码量)
python scripts/generate_retrofit.py swagger.json \
  --path /picture/getPictureDetailPage \
  --method POST \
  --only-used-models \
  -o MinimalApi.kt

搜索生成

# 搜索 "绘本" 相关接口并生成
python scripts/generate_retrofit.py swagger.json \
  --search "绘本" \
  -o PictureApis.kt

# 搜索 "getPicture" 路径相关接口
python scripts/generate_retrofit.py swagger.json \
  --search "getPicture" \
  --search-field path \
  -o PictureApis.kt

# 搜索 summary 包含 "首页" 的接口
python scripts/generate_retrofit.py swagger.json \
  --search "首页" \
  --search-field summary \
  -o HomePageApis.kt

# 按 tag 生成接口
python scripts/generate_retrofit.py swagger.json \
  --tag "绘本接口" \
  -o PictureApis.kt

# 多个 tags
python scripts/generate_retrofit.py swagger.json \
  --tag "绘本接口" \
  --tag "用户绘本接口" \
  -o PictureUserApis.kt

# 组合搜索:绘本接口 + POST 方法
python scripts/generate_retrofit.py swagger.json \
  --tag "绘本接口" \
  --method POST \
  --only-used-models \
  -o PicturePostApis.kt

命令行参数

fetch_swagger.py

参数 说明
url Swagger v2 API 文档 URL
--auth-type 认证方式:none / basic / bearer / api-key
-u, --username Basic Auth 用户名
-p, --password Basic Auth 密码
--token Bearer Token
--api-key API Key 值
--api-key-name API Key 名称(默认 X-API-Key
--api-key-in API Key 位置:header / query
-o, --output 输出文件路径(默认 stdout)

generate_retrofit.py

参数 说明
input 输入 JSON 文件,- 表示从 stdin 读取
-p, --package 包名(默认: com.example.api)
-s, --service-name Service 接口名(默认: ApiService)
--path 指定接口路径(可多次使用,支持通配符 *
-m, --method 指定 HTTP 方法(GET, POST, PUT, DELETE, PATCH)
--search 搜索关键词(搜索 path/summary/description/operationId/tags)
--search-field 指定搜索字段(可多次使用)
--tag 按 Tag 过滤(可多次使用)
--only-used-models 只生成被选中接口使用的数据类
-l, --list 列出所有可用接口
--list-tags 列出所有可用 Tags
-o, --output 输出文件路径(默认 stdout)

生成的代码结构

生成的 Kotlin 文件包含:

package com.dkzsxt.ruizhidian.api

import retrofit2.http.*
import okhttp3.ResponseBody

// 数据类
data class User(
    val id: Long,
    val name: String
)

// Service 接口
interface ApiService {
    
    @GET("/users/{id}")
    suspend fun getUserById(
        @Path("id") id: String
    ): User
    
    @POST("/users")
    suspend fun createUser(
        @Body body: User
    ): User
}

认证方式支持

Basic Auth

使用 -u-p 参数:

python scripts/fetch_swagger.py URL -u username -p password

Bearer Token (JWT)

python scripts/fetch_swagger.py URL --auth-type bearer --token TOKEN

API Key

# Header 方式
python scripts/fetch_swagger.py URL --auth-type api-key --api-key KEY --api-key-name X-API-Key

# Query 方式
python scripts/fetch_swagger.py URL --auth-type api-key --api-key KEY --api-key-name token --api-key-in query

参考文档

限制

  • 仅支持 Swagger v2 (OpenAPI 2.0),不支持 OpenAPI 3.0
  • 生成的方法使用 suspend 函数(Kotlin 协程)
  • 文件上传相关 API 需要手动调整
  • 复杂泛型响应可能需要手动修改

类名处理

Swagger 中的中文类名(如 Result«绘本详情信息对象»)会自动转换为合法的 Kotlin 类名:

原始类名 生成的类名
Result«绘本详情信息对象» ResultPictureBookDetailInfoObject
口语课商品列表对象 OralClassGoodsListObject
List<用户详情> List<UserDetail>

转换规则:

  1. 移除书名号等特殊字符 (« » 《 》 < >)
  2. 常见中文词汇自动翻译(如"绘本"→"PictureBook"、"详情"→"Detail")
  3. 其他中文字符替换为 X
  4. 转换为 PascalCase 格式
  5. 确保以字母开头

故障排除

401 认证失败

检查用户名密码是否正确:

python scripts/fetch_swagger.py URL -u admin -p admin

无法解析 JSON

确保 URL 返回的是 Swagger v2 JSON,不是 HTML 页面。

类型映射不正确

某些复杂类型(如 MapAny)可能需要手动调整。参考生成的代码并手动修复。

找不到指定接口

使用 --list 查看所有可用接口:

python scripts/generate_retrofit.py swagger.json --list
python scripts/generate_retrofit.py swagger.json --list --search keyword
python scripts/generate_retrofit.py swagger.json --list --search "绘本" --search-field summary

查看所有 tags:

python scripts/generate_retrofit.py swagger.json --list-tags

注意:

  • 路径需要完全匹配或使用 * 通配符
  • 方法名需大写(GET, POST, PUT, DELETE, PATCH)
  • 示例:--path /picture/getPictureDetailPage --method POST
  • 搜索支持中文,会搜索 path/summary/description/operationId/tags

生成的代码太多

使用 --only-used-models 只生成选中接口依赖的数据类:

python scripts/generate_retrofit.py swagger.json \
  --path /api/specific \
  --only-used-models \
  -o MinimalApi.kt

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs