UNPKG

auto-request

Version:

通过Yapi JSON Schema生成接口Axios或Taro接口

241 lines (220 loc) 6.59 kB
/** * 参数对比功能演示 * 展示新的 Swagger 参数级别对比功能 */ import { compareSwagger, generateComparisonMarkdown } from '../src/core/swagger-comparator'; // 创建旧版本的 Swagger const oldSwagger = { swagger: '2.0', info: { title: 'User API', version: '1.0.0' }, paths: { '/users': { get: { summary: 'Get users', description: 'Get all users', parameters: [ { name: 'page', in: 'query', type: 'integer', required: false, description: 'Page number', }, { name: 'limit', in: 'query', type: 'integer', required: false, description: 'Items per page', }, ], responses: { '200': { description: 'Success' }, }, }, post: { summary: 'Create user', parameters: [ { name: 'username', in: 'body', type: 'string', required: true, }, { name: 'age', in: 'body', type: 'string', required: false, }, ], responses: { '201': { description: 'Created' }, }, }, }, '/users/{id}': { get: { summary: 'Get user by ID', responses: { '200': { description: 'Success' }, }, }, }, }, }; // 创建新版本的 Swagger(包含多种变化) const newSwagger = { swagger: '2.0', info: { title: 'User API', version: '2.0.0' }, paths: { '/users': { get: { summary: 'Get all users', // 修改了摘要 description: 'Get all users with pagination support', // 修改了描述 parameters: [ { name: 'page', in: 'query', type: 'integer', required: true, // 改为必填 description: 'Page number (starting from 1)', }, { name: 'pageSize', // 参数改名(实际是删除 limit,新增 pageSize) in: 'query', type: 'integer', required: true, description: 'Number of items per page', }, { name: 'sort', // 新增参数 in: 'query', type: 'string', required: false, description: 'Sort field', }, ], responses: { '200': { description: 'Success' }, }, }, post: { summary: 'Create user', parameters: [ { name: 'username', in: 'body', type: 'string', required: true, }, { name: 'age', in: 'body', type: 'integer', // 类型从 string 改为 integer required: true, // 改为必填 }, { name: 'email', // 新增参数 in: 'body', type: 'string', required: true, description: 'User email address', }, ], responses: { '201': { description: 'Created' }, }, }, }, '/users/{id}': { put: { summary: 'Update user', parameters: [ { name: 'id', in: 'path', type: 'integer', required: true, }, ], responses: { '200': { description: 'Success' }, }, }, }, '/products': { get: { summary: 'Get products', responses: { '200': { description: 'Success' }, }, }, }, }, }; console.log('🚀 参数对比功能演示\n'); console.log('=' .repeat(80)); // 执行对比 const result = compareSwagger(JSON.stringify(oldSwagger), JSON.stringify(newSwagger)); // 输出统计信息 console.log('\n📊 对比统计:'); console.log(` 新增接口: ${result.added.length} 个`); console.log(` 删除接口: ${result.removed.length} 个`); console.log(` 修改接口: ${result.modified.length} 个`); // 统计参数变化 const paramChanges = result.modified.reduce( (acc, item) => { if (item.parameterChanges) { acc.added += item.parameterChanges.filter(p => p.changeType === 'added').length; acc.removed += item.parameterChanges.filter(p => p.changeType === 'removed').length; acc.modified += item.parameterChanges.filter(p => p.changeType === 'modified').length; } return acc; }, { added: 0, removed: 0, modified: 0 } ); const totalParamChanges = paramChanges.added + paramChanges.removed + paramChanges.modified; if (totalParamChanges > 0) { console.log('\n📝 参数变化详情:'); console.log(` 新增参数: ${paramChanges.added} 个`); console.log(` 删除参数: ${paramChanges.removed} 个`); console.log(` 修改参数: ${paramChanges.modified} 个`); } console.log('\n' + '=' .repeat(80)); // 详细输出修改的接口和参数变化 if (result.modified.length > 0) { console.log('\n🔍 详细变化:\n'); result.modified.forEach(({ endpoint, changes, parameterChanges }) => { console.log(`📍 ${endpoint.method} ${endpoint.path}`); console.log(` 变化: ${changes.join(', ')}`); if (parameterChanges && parameterChanges.length > 0) { console.log('\n 参数详细变化:'); const added = parameterChanges.filter(p => p.changeType === 'added'); const removed = parameterChanges.filter(p => p.changeType === 'removed'); const modified = parameterChanges.filter(p => p.changeType === 'modified'); if (added.length > 0) { console.log(' ✨ 新增:'); added.forEach(p => console.log(` • ${p.details}`)); } if (removed.length > 0) { console.log(' ❌ 删除:'); removed.forEach(p => console.log(` • ${p.details}`)); } if (modified.length > 0) { console.log(' 🔄 修改:'); modified.forEach(p => console.log(` • ${p.details}`)); } } console.log(''); }); } // 生成 Markdown 报告 console.log('=' .repeat(80)); console.log('\n📄 Markdown 格式报告:\n'); console.log('=' .repeat(80)); const markdown = generateComparisonMarkdown(result); console.log(markdown); console.log('=' .repeat(80)); console.log('\n✅ 演示完成!'); console.log('\n💡 提示: 这个对比结果会自动保存到快照文件中(如果配置了 snapshotsPath)');