API Specification Converter
The `api-spec-converter` package provides a utility for transforming API descriptions between various popular formats, including OpenAPI (formerly Swagger), RAML, API Blueprint, I/O Docs, Google Discovery, and WADL. As of its current stable version, 2.12.0, its core functionality is robust for conversions *to* OpenAPI 2.0 and *from* OpenAPI 2.0 to OpenAPI 3.x. This specialized focus means it does not offer full bidirectional conversion support for all listed formats. The library offers both a command-line interface (CLI) for quick conversions and a programmatic API for Node.js and browser environments, supporting both traditional callback and modern Promise-based asynchronous patterns. While a specific release cadence isn't explicitly stated, the version numbering indicates ongoing development and maintenance, making it a reliable choice for its specific conversion strengths within the API ecosystem.
Common errors
-
TypeError: Converter.convert is not a function
cause Attempting to import `Converter` as a named export (`import { Converter } from 'api-spec-converter';`) when it is exposed as a default CommonJS export.fixFor ES Modules, use `import Converter from 'api-spec-converter';`. For CommonJS, use `const Converter = require('api-spec-converter');`. -
ReferenceError: APISpecConverter is not defined
cause Trying to use the `APISpecConverter` global variable in a Node.js environment without properly importing the module.fixIn Node.js, you must `require()` or `import` the module using `const Converter = require('api-spec-converter');`. The `APISpecConverter` global is only available in browsers after including the UMD build script. -
Error: Unknown format 'unsupported_format'
cause Providing an unrecognized or unsupported API specification format string to the `from` or `to` options during conversion.fixEnsure the format strings match the officially supported list: `swagger_1`, `swagger_2`, `openapi_3`, `api_blueprint`, `io_docs`, `google`, `raml`, `wadl`. Also, verify the conversion path (e.g., from `raml` to `openapi_3`) is supported.
Warnings
- breaking The library has significant limitations on the types of conversions it supports. It primarily supports converting *to* OpenAPI (fka Swagger) 2.0 and *from* OpenAPI 2.0 to OpenAPI 3.x. Full bidirectional conversion between all listed formats (RAML, API Blueprint, WADL, etc.) is not supported, and attempting conversions outside the documented paths will fail.
- gotcha Users installing the global CLI tool (`npm install -g api-spec-converter`) may encounter issues, particularly on Windows or with certain Node.js/NPM configurations. A known issue (GitHub issue #132) highlights potential problems during global installation.
- gotcha This package requires Node.js version 6.0.0 or higher. Running it with older Node.js versions may lead to unexpected errors or silent failures due to incompatible syntax or missing APIs.
Install
-
npm install api-spec-converter -
yarn add api-spec-converter -
pnpm add api-spec-converter
Imports
- Converter
import { Converter } from 'api-spec-converter';const Converter = require('api-spec-converter'); - APISpecConverter
const APISpecConverter = require('api-spec-converter').APISpecConverter;APISpecConverter.convert(...); // after <script src="..."></script>
- Converter (ESM)
import { convert } from 'api-spec-converter';import Converter from 'api-spec-converter';
Quickstart
const Converter = require('api-spec-converter');
const fs = require('fs');
Converter.convert({
from: 'swagger_1',
to: 'swagger_2',
source: 'https://raw.githubusercontent.com/LucyBot-Inc/api-spec-converter/master/test/input/swagger_1/petstore/pet.json',
})
.then(function(converted) {
// Optionally fill missing required fields with dummy data
converted.fillMissing();
// Validate the converted specification
return converted.validate()
.then(function (result) {
if (result.errors && result.errors.length > 0)
return console.error('Validation Errors:', JSON.stringify(result.errors, null, 2));
if (result.warnings && result.warnings.length > 0)
console.warn('Validation Warnings:', JSON.stringify(result.warnings, null, 2));
// Save the converted spec to a file
fs.writeFileSync('converted-swagger2.json', converted.stringify({ syntax: 'json', order: 'openapi' }));
console.log('Converted spec saved to converted-swagger2.json');
})
.catch(function(validationErr) {
console.error('Validation failed:', validationErr);
});
})
.catch(function(conversionErr) {
console.error('Conversion failed:', conversionErr);
});