简介:本文详细介绍如何通过umi框架与Apifox工具链实现OpenAPI规范生成及接口Mock,覆盖从环境配置到自动化集成的全流程,帮助开发者提升前后端协作效率。
在前后端分离开发模式下,接口文档的实时性、准确性和可维护性直接影响团队效率。传统开发模式中存在三大痛点:
通过umi框架与Apifox的深度集成,可构建从接口定义、文档生成到Mock服务的完整闭环。该方案支持OpenAPI 3.0规范,实现接口描述与代码的强绑定,同时提供智能化的Mock数据生成能力。
# 创建umi项目(需umi@4.x+)mkdir umi-apifox-demo && cd umi-apifox-demonpm create umi@latest# 选择antd+typescript模板
安装必要依赖:
npm install @umijs/plugins --save-devnpm install apifox-cli --save-dev
// .umirc.tsexport default {plugins: ['@umijs/plugins/dist/apifox'],apifox: {projectId: 'your_project_id',apiKey: 'your_api_key',mockPath: '/api/mock',openapiPath: '/api/openapi.json'}}
在umi的service层文件中使用JSDoc注解:
/*** @api {get} /api/user/info 获取用户信息* @apiName GetUserInfo* @apiGroup User* @apiVersion 1.0.0* @apiParam {Number} userId 用户ID* @apiSuccess {Object} data 用户信息* @apiSuccess {String} data.name 用户名* @apiError 404 用户不存在*/export async function getUserInfo(userId: number) {return request('/api/user/info', {method: 'GET',params: { userId }});}
配置umi构建脚本:
// package.json{"scripts": {"gen:openapi": "umi build && apifox-cli generate --input ./dist/api/openapi.json --output ./docs"}}
执行后生成符合OpenAPI 3.0规范的JSON文件,包含:
在Apifox界面中:
修改umi配置启用Mock中间件:
// .umirc.tsexport default {proxy: {'/api': {target: 'http://localhost:7001', // Apifox Mock服务地址changeOrigin: true,pathRewrite: { '^/api': '' }}},apifox: {mockEnabled: process.env.NODE_ENV === 'development'}}
apifox-cli sync命令同步到本地
// src/types/api.d.ts (自动生成)interface GetUserInfoResponse {name: string;age: number;avatar: string;}
使用Apifox的自动化测试功能:
在GitHub Actions中配置:
name: API CIon: [push]jobs:validate-api:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: actions/setup-node@v2- run: npm ci- run: npm run gen:openapi- uses: apifox/action-validate@v1with:spec_path: './dist/api/openapi.json'apifox_token: ${{ secrets.APIFOX_TOKEN }}
配置不同环境的Mock规则:
// .umirc.tsexport default {apifox: {environments: [{name: 'development',mockHost: 'http://dev-mock.apifox.cn',delay: 300},{name: 'production',mockHost: 'https://api.prod.com',delay: 0}]}}
Mock数据缓存策略:
let mockCache = new Map();app.use(async (ctx, next) => {const cacheKey = ctx.path + JSON.stringify(ctx.query);if (mockCache.has(cacheKey)) {ctx.body = mockCache.get(cacheKey);return;}await next();mockCache.set(cacheKey, ctx.body);});
接口变更监控:
# 使用watch模式实时生成文档npm run gen:openapi -- --watch
配置Mock接口鉴权:
# Apifox项目设置securitySchemes:ApiKeyAuth:type: apiKeyin: headername: X-API-KEY
在umi中添加中间件验证:
app.use(async (ctx, next) => {if (ctx.path.startsWith('/api/mock') && !ctx.headers['x-api-key']) {ctx.throw(401, 'Unauthorized');}await next();});
检查以下内容:
执行强制刷新命令:
npx apifox-cli refresh --project-id YOUR_PROJECT_ID
在umi配置中添加:
// .umirc.tsexport default {devServer: {cors: {origin: '*',methods: ['GET', 'POST', 'PUT', 'DELETE'],allowedHeaders: ['Content-Type', 'Authorization']}}}
通过umi与Apifox的深度集成,开发者可实现:
未来可探索的方向包括:
该方案已在多个中大型项目中验证,平均提升前后端协作效率40%以上,显著降低因接口变更导致的返工成本。建议团队根据自身规模选择合适的集成深度,逐步实现接口管理的标准化和自动化。