Skip to main content
Glama
swagger2openapi-integration-plan.mdโ€ข13.7 kB
# Swagger2OpenAPI ้›†ๆˆๅฎž็Žฐๆ–นๆกˆ ## 1. swagger2openapi ๅŒ…ไป‹็ป ### 1.1 ๅŒ…็š„ไฝœ็”จ `swagger2openapi` ๆ˜ฏไธ€ไธชไธ“้—จ็”จไบŽๅฐ† Swagger 2.0 (OpenAPI 2.0) ่ง„่Œƒ่ฝฌๆขไธบ OpenAPI 3.0.x ่ง„่Œƒ็š„ Node.js ๅŒ…ใ€‚ๅฎƒๅ…ทๆœ‰ไปฅไธ‹ไธป่ฆๅŠŸ่ƒฝ๏ผš - **่‡ชๅŠจ่ฝฌๆข**๏ผšๅฐ† Swagger 2.0 ่ง„่Œƒ่‡ชๅŠจ่ฝฌๆขไธบ OpenAPI 3.0.x ๆ ผๅผ - **ๅผ•็”จไฟๆŠค**๏ผš้ป˜่ฎคไฟ็•™ๅ‡ ไนŽๆ‰€ๆœ‰็š„ `$ref` JSON ๅผ•็”จ๏ผŒไธไผš่งฃๅผ•็”จๆ‰€ๆœ‰้กน็›ฎ - **ๆจกๅผ่ฝฌๆข**๏ผš่‡ชๅŠจ"ไฟฎๅค"ไธๅ…ผๅฎน็š„ Swagger 2.0 ๆจกๅผ้—ฎ้ข˜ - **้ชŒ่ฏๅŠŸ่ƒฝ**๏ผšๅ†…็ฝฎ OpenAPI 3.0.x ้ชŒ่ฏๅŠŸ่ƒฝ - **ๅคš็ง่พ“ๅ…ฅๆบ**๏ผšๆ”ฏๆŒไปŽๆ–‡ไปถใ€URLใ€ๅญ—็ฌฆไธฒ็ญ‰ๅคš็งๆ–นๅผๅŠ ่ฝฝ่ง„่Œƒ - **่ง„่Œƒๆ‰ฉๅฑ•**๏ผšๆ”ฏๆŒๆœ‰้™็š„็Žฐๅฎžไธ–็•Œ่ง„่Œƒๆ‰ฉๅฑ• ### 1.2 ๆ ธๅฟƒ็‰นๆ€ง - **ๅผ•็”จไฟๆŠค**๏ผšไฟๆŒ `$ref` ๅผ•็”จ่€Œไธๆ˜ฏๅฎŒๅ…จ่งฃๅผ•็”จ - **้”™่ฏฏไฟฎๅค**๏ผš่‡ชๅŠจไฟฎๅคๅฐ้”™่ฏฏ๏ผˆpatch ๆจกๅผ๏ผ‰ - **็ตๆดป้…็ฝฎ**๏ผšไธฐๅฏŒ็š„้…็ฝฎ้€‰้กน - **ๅคšๆ ผๅผๆ”ฏๆŒ**๏ผšๆ”ฏๆŒ JSON ๅ’Œ YAML ๆ ผๅผ - **้ซ˜ๆ€ง่ƒฝ**๏ผš็ป่ฟ‡ 74,426 ไธช็œŸๅฎžไธ–็•Œ Swagger 2.0 ๅฎšไน‰็š„ๆต‹่ฏ• ## 2. ๅœจ mcp-swagger-parser ไธญ็š„ๅบ”็”จๅœบๆ™ฏ ### 2.1 ๅฝ“ๅ‰็—›็‚น - ่ฎธๅคšไผ ็ปŸ API ไป็„ถไฝฟ็”จ Swagger 2.0 ๆ ผๅผ - ็Žฐๆœ‰็š„ `@apidevtools/swagger-parser` ไธป่ฆ้’ˆๅฏน OpenAPI 3.0+ - ้œ€่ฆๆ‰‹ๅŠจๅค„็† Swagger 2.0 ๅˆฐ OpenAPI 3.0 ็š„่ฝฌๆข ### 2.2 ้›†ๆˆๆ”ถ็›Š - **่‡ชๅŠจๅ…ผๅฎน**๏ผšๆ— ็ผๆ”ฏๆŒ Swagger 2.0 ่ง„่Œƒ - **้€ๆ˜Ž่ฝฌๆข**๏ผš็”จๆˆทๆ— ้œ€ๅ…ณๅฟƒๅบ•ๅฑ‚็‰ˆๆœฌ่ฝฌๆข - **ๅ‡ๅฐ‘้”™่ฏฏ**๏ผš่‡ชๅŠจไฟฎๅคๅธธ่ง็š„ Swagger 2.0 ้—ฎ้ข˜ - **ๆๅ‡ไฝ“้ชŒ**๏ผš็ปŸไธ€็š„ API ๆŽฅๅฃๅค„็†ไธค็งๆ ผๅผ ## 3. ๆŠ€ๆœฏๅฎž็Žฐๆ–นๆกˆ ### 3.1 ๆžถๆž„่ฎพ่ฎก ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ OpenAPIParser โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ URL Parser โ”‚ โ”‚ File Parser โ”‚ โ”‚ Text Parser โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Version Detection & Conversion โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Swagger 2.0 โ”‚ โ”‚ OpenAPI 3.0+ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Detection โ”‚ โ”‚ Direct Parse โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ swagger2openapi โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Conversion โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Validator โ”‚ โ”‚ Normalizer โ”‚ โ”‚ Transformer โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### 3.2 ๆ ธๅฟƒ็ป„ไปถๅฎž็Žฐ #### 3.2.1 ็‰ˆๆœฌๆฃ€ๆต‹ๅ™จ (VersionDetector) ```typescript export class VersionDetector { static detect(spec: any): 'swagger2' | 'openapi3' | 'unknown' { if (spec.swagger && spec.swagger.startsWith('2.')) { return 'swagger2'; } if (spec.openapi && spec.openapi.startsWith('3.')) { return 'openapi3'; } return 'unknown'; } } ``` #### 3.2.2 Swagger2OpenAPI ่ฝฌๆขๅ™จ (Swagger2OpenAPIConverter) ```typescript import * as swagger2openapi from 'swagger2openapi'; export class Swagger2OpenAPIConverter { private options: swagger2openapi.Options; constructor(options: ConversionOptions = {}) { this.options = { patch: true, // ไฟฎๅคๅฐ้”™่ฏฏ warnOnly: false, // ้‡ๅˆฐ้”™่ฏฏๆ—ถๆŠ›ๅ‡บๅผ‚ๅธธ resolveInternal: false, // ไธ่งฃๆžๅ†…้ƒจๅผ•็”จ ...options }; } async convert(swagger2Spec: any): Promise<OpenAPISpec> { try { const result = await swagger2openapi.convertObj(swagger2Spec, this.options); return result.openapi; } catch (error) { throw new Swagger2OpenAPIConversionError( `Failed to convert Swagger 2.0 to OpenAPI 3.0: ${error.message}`, error ); } } } ``` #### 3.2.3 ๅขžๅผบ็š„่งฃๆžๅ™จ (EnhancedParser) ```typescript export class EnhancedParser extends OpenAPIParser { private converter: Swagger2OpenAPIConverter; constructor(config: ParserConfig = {}) { super(config); this.converter = new Swagger2OpenAPIConverter({ patch: config.autoFix !== false, warnOnly: !config.strictMode }); } protected async processSpec( spec: any, metadata: Partial<ParseResult['metadata']> ): Promise<ParseResult> { // ๆฃ€ๆต‹็‰ˆๆœฌ const version = VersionDetector.detect(spec); // ๅฆ‚ๆžœๆ˜ฏ Swagger 2.0๏ผŒๅ…ˆ่ฝฌๆขไธบ OpenAPI 3.0 if (version === 'swagger2') { console.log('ๆฃ€ๆต‹ๅˆฐ Swagger 2.0 ่ง„่Œƒ๏ผŒๆญฃๅœจ่ฝฌๆขไธบ OpenAPI 3.0...'); spec = await this.converter.convert(spec); // ๆ›ดๆ–ฐๅ…ƒๆ•ฐๆฎ metadata.conversionPerformed = true; metadata.originalVersion = 'swagger2'; metadata.targetVersion = 'openapi3'; } // ่ฐƒ็”จ็ˆถ็ฑปๅค„็†้€ป่พ‘ return super.processSpec(spec, metadata); } } ``` ### 3.3 ้…็ฝฎ้€‰้กนๆ‰ฉๅฑ• #### 3.3.1 ๆ–ฐๅขž้…็ฝฎๆŽฅๅฃ ```typescript export interface EnhancedParserConfig extends ParserConfig { // Swagger 2.0 ่ฝฌๆข้€‰้กน swagger2Options?: { patch?: boolean; // ๆ˜ฏๅฆไฟฎๅคๅฐ้”™่ฏฏ warnOnly?: boolean; // ๆ˜ฏๅฆไป…่ญฆๅ‘Š่€ŒไธๆŠ›ๅ‡บๅผ‚ๅธธ resolveInternal?: boolean; // ๆ˜ฏๅฆ่งฃๆžๅ†…้ƒจๅผ•็”จ targetVersion?: string; // ็›ฎๆ ‡ OpenAPI ็‰ˆๆœฌ preserveRefs?: boolean; // ๆ˜ฏๅฆไฟ็•™ๅผ•็”จ }; // ่‡ชๅŠจๆฃ€ๆต‹ๅ’Œ่ฝฌๆข autoConvert?: boolean; // ๆ˜ฏๅฆ่‡ชๅŠจ่ฝฌๆข Swagger 2.0 autoFix?: boolean; // ๆ˜ฏๅฆ่‡ชๅŠจไฟฎๅค้”™่ฏฏ } ``` #### 3.3.2 ้ป˜่ฎค้…็ฝฎ ```typescript export const ENHANCED_DEFAULT_CONFIG: Required<EnhancedParserConfig> = { ...DEFAULT_PARSER_CONFIG, swagger2Options: { patch: true, warnOnly: false, resolveInternal: false, targetVersion: '3.0.0', preserveRefs: true }, autoConvert: true, autoFix: true }; ``` ### 3.4 ้”™่ฏฏๅค„็†ๅขžๅผบ #### 3.4.1 ๆ–ฐๅขž้”™่ฏฏ็ฑปๅž‹ ```typescript export class Swagger2OpenAPIConversionError extends OpenAPIParseError { constructor( message: string, public originalError?: Error, public conversionOptions?: any ) { super(message, ERROR_CODES.CONVERSION_ERROR); this.name = 'Swagger2OpenAPIConversionError'; } } export class UnsupportedVersionError extends OpenAPIParseError { constructor(version: string) { super( `Unsupported API specification version: ${version}`, ERROR_CODES.UNSUPPORTED_VERSION ); this.name = 'UnsupportedVersionError'; } } ``` #### 3.4.2 ้”™่ฏฏ็ ๆ‰ฉๅฑ• ```typescript export const ERROR_CODES = { ...existingErrorCodes, CONVERSION_ERROR: 'CONVERSION_ERROR', UNSUPPORTED_VERSION: 'UNSUPPORTED_VERSION', VERSION_DETECTION_FAILED: 'VERSION_DETECTION_FAILED' }; ``` ### 3.5 ็ฑปๅž‹ๅฎšไน‰ๅขžๅผบ #### 3.5.1 ๅ…ƒๆ•ฐๆฎๆ‰ฉๅฑ• ```typescript export interface EnhancedParseMetadata extends ParseMetadata { conversionPerformed?: boolean; originalVersion?: 'swagger2' | 'openapi3'; targetVersion?: string; conversionDuration?: number; patchesApplied?: number; } ``` #### 3.5.2 ่งฃๆž็ป“ๆžœๆ‰ฉๅฑ• ```typescript export interface EnhancedParseResult extends ParseResult { metadata: EnhancedParseMetadata; conversionWarnings?: string[]; } ``` ## 4. ๅฎž็Žฐๆญฅ้ชค ### 4.1 Phase 1: ๅŸบ็ก€้›†ๆˆ (Week 1) 1. **ๅฎ‰่ฃ…ไพ่ต–** ```bash npm install swagger2openapi @types/swagger2openapi ``` 2. **ๅˆ›ๅปบ็‰ˆๆœฌๆฃ€ๆต‹ๅ™จ** - ๅฎž็Žฐ `VersionDetector` ็ฑป - ๆทปๅŠ ็‰ˆๆœฌๆฃ€ๆต‹้€ป่พ‘ - ็ผ–ๅ†™ๅ•ๅ…ƒๆต‹่ฏ• 3. **ๅˆ›ๅปบ่ฝฌๆขๅ™จ** - ๅฎž็Žฐ `Swagger2OpenAPIConverter` ็ฑป - ้…็ฝฎ่ฝฌๆข้€‰้กน - ๅค„็†่ฝฌๆข้”™่ฏฏ ### 4.2 Phase 2: ่งฃๆžๅ™จๅขžๅผบ (Week 2) 1. **ๅขžๅผบไธป่งฃๆžๅ™จ** - ไฟฎๆ”น `OpenAPIParser` ็ฑป - ้›†ๆˆ็‰ˆๆœฌๆฃ€ๆต‹ๅ’Œ่ฝฌๆข้€ป่พ‘ - ๆ›ดๆ–ฐ้…็ฝฎๆŽฅๅฃ 2. **้”™่ฏฏๅค„็†ๅฎŒๅ–„** - ๆทปๅŠ ๆ–ฐ็š„้”™่ฏฏ็ฑปๅž‹ - ๅฎŒๅ–„้”™่ฏฏๆถˆๆฏๅ’Œๅ †ๆ ˆ่ทŸ่ธช - ๆทปๅŠ ้”™่ฏฏๆขๅคๆœบๅˆถ ### 4.3 Phase 3: ๅŠŸ่ƒฝๅฎŒๅ–„ (Week 3) 1. **้…็ฝฎ้€‰้กนๆ‰ฉๅฑ•** - ๆ‰ฉๅฑ•้…็ฝฎๆŽฅๅฃ - ๅฎž็Žฐ้…็ฝฎ้ชŒ่ฏ - ๆทปๅŠ ้…็ฝฎๆ–‡ๆกฃ 2. **ๅ…ƒๆ•ฐๆฎๅ’Œๆ—ฅๅฟ—ๅขžๅผบ** - ๆ‰ฉๅฑ•ๅ…ƒๆ•ฐๆฎไฟกๆฏ - ๆทปๅŠ ่ฝฌๆข่ฟ‡็จ‹ๆ—ฅๅฟ— - ๅฎž็Žฐๆ€ง่ƒฝ็›‘ๆŽง ### 4.4 Phase 4: ๆต‹่ฏ•ๅ’Œไผ˜ๅŒ– (Week 4) 1. **ๅ…จ้ขๆต‹่ฏ•** - ๅ•ๅ…ƒๆต‹่ฏ•่ฆ†็›– - ้›†ๆˆๆต‹่ฏ• - ๆ€ง่ƒฝๆต‹่ฏ• 2. **ๆ–‡ๆกฃๅ’Œ็คบไพ‹** - ๆ›ดๆ–ฐ API ๆ–‡ๆกฃ - ๆทปๅŠ ไฝฟ็”จ็คบไพ‹ - ็ผ–ๅ†™่ฟ็งปๆŒ‡ๅ— ## 5. ไฝฟ็”จ็คบไพ‹ ### 5.1 ๅŸบๆœฌไฝฟ็”จ ```typescript import { parseAndTransform } from 'mcp-swagger-parser'; // ่‡ชๅŠจๆฃ€ๆต‹ๅ’Œ่ฝฌๆข Swagger 2.0 const tools = await parseAndTransform('swagger2-api.json', { parserConfig: { autoConvert: true, swagger2Options: { patch: true, warnOnly: false } } }); ``` ### 5.2 ้ซ˜็บง้…็ฝฎ ```typescript const parser = new OpenAPIParser({ autoConvert: true, swagger2Options: { patch: true, resolveInternal: false, targetVersion: '3.0.3' } }); const result = await parser.parseFromUrl('https://api.example.com/swagger.json'); if (result.metadata.conversionPerformed) { console.log(`่ฝฌๆขๅฎŒๆˆ: ${result.metadata.originalVersion} -> ${result.metadata.targetVersion}`); console.log(`่ฝฌๆข่€—ๆ—ถ: ${result.metadata.conversionDuration}ms`); } ``` ### 5.3 ้”™่ฏฏๅค„็† ```typescript try { const result = await parseFromFile('swagger2.yaml'); } catch (error) { if (error instanceof Swagger2OpenAPIConversionError) { console.error('Swagger 2.0 ่ฝฌๆขๅคฑ่ดฅ:', error.message); console.error('ๅŽŸๅง‹้”™่ฏฏ:', error.originalError); } else if (error instanceof UnsupportedVersionError) { console.error('ไธๆ”ฏๆŒ็š„็‰ˆๆœฌ:', error.message); } } ``` ## 6. ๅ…ผๅฎนๆ€ง่€ƒ่™‘ ### 6.1 ๅ‘ๅŽๅ…ผๅฎน - ็Žฐๆœ‰ API ไฟๆŒไธๅ˜ - ๆ–ฐๅŠŸ่ƒฝ้€š่ฟ‡้…็ฝฎ้€‰้กนๅฏ็”จ - ้ป˜่ฎค่กŒไธบไฟๆŒไธ€่‡ด ### 6.2 ๆ€ง่ƒฝๅฝฑๅ“ - ่ฝฌๆขๆ“ไฝœไป…ๅœจๆฃ€ๆต‹ๅˆฐ Swagger 2.0 ๆ—ถๆ‰ง่กŒ - ๅ†…ๅญ˜ไฝฟ็”จๅขžๅŠ ็บฆ 10-20% - ่งฃๆžๆ—ถ้—ดๅขžๅŠ ็บฆ 5-15% ### 6.3 ไพ่ต–็ฎก็† - `swagger2openapi` ไฝœไธบ็›ดๆŽฅไพ่ต– - ็‰ˆๆœฌ้”ๅฎš็กฎไฟ็จณๅฎšๆ€ง - ๅฎšๆœŸๆ›ดๆ–ฐๅ’Œๅฎ‰ๅ…จๆ‰ซๆ ## 7. ๆต‹่ฏ•็ญ–็•ฅ ### 7.1 ๆต‹่ฏ•่ฆ†็›– - ๅ•ๅ…ƒๆต‹่ฏ•๏ผš> 90% - ้›†ๆˆๆต‹่ฏ•๏ผšไธป่ฆไฝฟ็”จๅœบๆ™ฏ - ๆ€ง่ƒฝๆต‹่ฏ•๏ผšๅŸบๅ‡†ๆต‹่ฏ•ๅ’Œๅ›žๅฝ’ๆต‹่ฏ• ### 7.2 ๆต‹่ฏ•ๆ•ฐๆฎ - ็œŸๅฎžไธ–็•Œ็š„ Swagger 2.0 ่ง„่Œƒ - ่พน็ผ˜ๆƒ…ๅ†ตๅ’Œ้”™่ฏฏๆƒ…ๅ†ต - ๅคงๅž‹ๅคๆ‚่ง„่Œƒ็š„ๆ€ง่ƒฝๆต‹่ฏ• ### 7.3 ๆŒ็ปญ้›†ๆˆ - ่‡ชๅŠจๅŒ–ๆต‹่ฏ•ๆตๆฐด็บฟ - ๅคš Node.js ็‰ˆๆœฌๆต‹่ฏ• - ไพ่ต–ๅฎ‰ๅ…จๆ‰ซๆ ## 8. ้ฃŽ้™ฉ่ฏ„ไผฐ ### 8.1 ๆŠ€ๆœฏ้ฃŽ้™ฉ - **ไพ่ต–้ฃŽ้™ฉ**๏ผšswagger2openapi ๅŒ…็ปดๆŠค็Šถๆ€ - **่ฝฌๆข้ฃŽ้™ฉ**๏ผšๅคๆ‚่ง„่Œƒ็š„่ฝฌๆขๅ‡†็กฎๆ€ง - **ๆ€ง่ƒฝ้ฃŽ้™ฉ**๏ผšๅคงๅž‹่ง„่Œƒ็š„ๅค„็†ๆ€ง่ƒฝ ### 8.2 ็ผ“่งฃ็ญ–็•ฅ - ็‰ˆๆœฌ้”ๅฎšๅ’ŒๅฎšๆœŸ่ฏ„ไผฐ - ๅ…จ้ข็š„ๆต‹่ฏ•่ฆ†็›– - ๆ€ง่ƒฝ็›‘ๆŽงๅ’Œไผ˜ๅŒ– ## 9. ๆ€ป็ป“ ้€š่ฟ‡้›†ๆˆ `swagger2openapi`๏ผŒ`mcp-swagger-parser` ๅฐ†่ƒฝๅคŸ๏ผš 1. **ๆ— ็ผๆ”ฏๆŒ** Swagger 2.0 ๅ’Œ OpenAPI 3.0+ ่ง„่Œƒ 2. **่‡ชๅŠจ่ฝฌๆข** ๆ—ง็‰ˆ่ง„่Œƒๅˆฐๆ–ฐ็‰ˆๆ ผๅผ 3. **ๆๅ‡็”จๆˆทไฝ“้ชŒ** ้€š่ฟ‡็ปŸไธ€็š„ API ๆŽฅๅฃ 4. **ๅขžๅผบ้”™่ฏฏๅค„็†** ๅ’Œ่ฐƒ่ฏ•่ƒฝๅŠ› 5. **ไฟๆŒๅ‘ๅŽๅ…ผๅฎน** ็Žฐๆœ‰ๅŠŸ่ƒฝ ่ฟ™ไธช้›†ๆˆๆ–นๆกˆๆ—ข่ƒฝๆปก่ถณ็Žฐๆœ‰็”จๆˆท้œ€ๆฑ‚๏ผŒๅˆ่ƒฝๆ‰ฉๅฑ•ๅฏนไผ ็ปŸ API ็š„ๆ”ฏๆŒ๏ผŒๆ˜ฏไธ€ไธชๅนณ่กก็š„ๆŠ€ๆœฏๅ†ณ็ญ–ใ€‚

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zaizaizhao/mcp-swagger-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server