| Crates.io | apifox2code |
| lib.rs | apifox2code |
| version | 0.1.4 |
| created_at | 2025-09-12 02:49:56.594827+00 |
| updated_at | 2025-09-22 10:04:29.034637+00 |
| description | A tool to convert Apifox API definitions to code. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1834972 |
| size | 309,647 |
这是一个基于 Rust 的工具,用于从 Apifox 的 OpenAPI 文档自动生成 TypeScript 类型定义和 API 客户端代码。
http://127.0.0.1:4523# 生成所有代码
cargo run -- generate
# 或者直接运行(默认行为)
cargo run
# 查看主帮助
cargo run -- --help
# 查看生成命令帮助
cargo run -- generate --help
cargo run -- list-folders
# 生成 Customer Service 文件夹的代码
cargo run -- generate --folder "Customer Service"
# 生成中文文件夹的代码
cargo run -- generate --folder "公共分类 Public Classification"
# 指定输出目录
cargo run -- generate --folder "Lucky Draw" --output my_api_code
cargo run -- generate \
--folder "Customer Service" \
--output customer_service_api \
--project-id 162 \
--base-url http://127.0.0.1:4523
# 使用高级模板(包含超时、重试等高级功能)
cargo run -- generate --template advanced
# 使用 React 模板(生成 React Hooks)
cargo run -- generate --template react
# 使用 Oboss 模板(函数式导出,支持 Mock)
cargo run -- generate --template oboss
# 使用默认模板(传统方式)
cargo run -- generate --template default
# 使用自定义模板目录
cargo run -- generate --template-dir my_templates
# 结合文件夹和模板
cargo run -- generate --folder "Customer Service" --template advanced
cargo run -- generate --folder "Lucky Draw" --template oboss
详细的使用说明请参考:
运行后会生成以下文件:
openapi_doc.json - 从 Apifox 获取的原始 OpenAPI 文档generated_types.ts - TypeScript 类型定义api_client.ts - API 客户端类generated_api.ts - 完整的 API 文件(包含类型和客户端)generated_by_folders/ - 按 Apifox 文件夹结构组织的代码目录
api.ts - 该文件夹的 API 客户端types.ts - 该文件夹相关的类型定义index.ts - 该文件夹的导出文件index.ts - 主索引文件,导出所有模块import { ApiClient } from './api_client';
import { MktTheme, Points, Enum } from './generated_types';
const apiClient = new ApiClient('https://your-api-base-url.com');
// 获取楼层列表
const floors = await apiClient.getFloors({
location: 'HOME',
isActive: 'true',
offset: 0,
limit: 10
});
// 导入特定模块
import { ApiClient as CustomerServiceClient } from './generated_by_folders/customer_service';
import { ApiClient as LuckyDrawClient } from './generated_by_folders/lucky_draw';
// 或者从主索引导入
import { customer_service, lucky_draw } from './generated_by_folders';
// 创建模块化客户端
const customerService = new CustomerServiceClient('https://your-api-base-url.com');
const luckyDraw = new LuckyDrawClient('https://your-api-base-url.com');
// 使用特定模块的 API
const contacts = await customerService.getContact({
startDate: '2024-01-01',
endDate: '2024-01-31',
limit: '20',
offset: '0'
});
const drawInfo = await luckyDraw.getLuckyDraw({
id: 'draw-123',
cookie: 'session-cookie'
});
const theme: MktTheme = {
components: [],
createTime: Date.now(),
id: 'theme-123',
location: 'LUCKY_DRAW', // 类型安全:只能是 "LUCKY_DRAW" | "MGM"
name: '我的主题',
status: 'ENABLED', // 类型安全:只能是 "ENABLED" | "DISABLED" | "DELETED" | "SAVED"
template: {} as any,
templateId: 'template-123',
updateTime: Date.now(),
validFrom: null,
validTo: null
};
在 src/main.rs 中修改项目 ID:
let api_url = "http://127.0.0.1:4523/export/openapi?projectId=YOUR_PROJECT_ID&specialPurpose=openapi-generator";
可以在 typescript_generator.rs 中自定义:
export enum SourceEnum {
BNPL = "BNPL",
CASH = "CASH",
CARD = "CARD",
ATOME = "ATOME",
SAVINGS = "SAVINGS",
VA_PAYLATER = "VA_PAYLATER",
BMI_CARD = "BMI_CARD"
}
export interface MktTheme {
components: ComponentInfo[];
createTime: number;
id: string;
location: "LUCKY_DRAW" | "MGM";
name: string;
status: "ENABLED" | "DISABLED" | "DELETED" | "SAVED";
template: ThemeTemplate;
templateId: string;
updateTime: number;
validFrom: number | null;
validTo: number | null;
}
export class ApiClient {
// 获取楼层列表
async getFloors(params: { location?: string, isActive: string, offset?: number, limit?: number, Cookie?: string }): Promise<any>
// 创建楼层
async createFloors(params: { Cookie?: string, body: any }): Promise<any>
// 更新模块
async createUpdate(params: { moduleId: string, Content-Type: string, body: any }): Promise<any>
}
连接 Apifox 失败
http://127.0.0.1:4523编译错误
cargo clean && cargo build 清理缓存生成的类型不完整
openapi_doc.json 文件内容欢迎提交 Issue 和 Pull Request 来改进这个工具!
MIT License