Swagger Parser API
Things to Know
Classes & Methods
The SwaggerParser
class
api
property$refs
propertyvalidate()
methoddereference()
methodbundle()
methodparse()
methodresolve()
method
The $Refs
class
The Options
object
Class methods vs. Instance methods
All of Swagger Parser’s methods are available as static (class) methods, and as instance methods. The static methods simply create a new SwaggerParser
instance and then call the corresponding instance method. Thus, the following line…
SwaggerParser.validate("my-api.yaml");
… is the same as this:
let parser = new SwaggerParser();
parser.validate("my-api.yaml");
The difference is that in the second example you now have a reference to parser
, which means you can access the results (parser.api
and parser.$refs
) anytime you want, rather than just in the callback function.
Callbacks vs. Promises
Many people prefer async
/await
or Promise syntax instead of callbacks. Swagger Parser allows you to use whichever one you prefer.
If you pass a callback function to any method, then the method will call the callback using the Node.js error-first convention. If you do not pass a callback function, then the method will return a Promise.
The following two examples are equivalent:
// Callback syntax
SwaggerParser.validate(mySchema, (err, api) => {
if (err) {
// Error
}
else {
// Success
}
});
try {
// async/await syntax
let api = await SwaggerParser.validate(mySchema);
// Success
}
catch(err) {
// Error
}
Circular $Refs
Swagger APIs can contain circular $ref pointers, and Swagger Parser fully supports them. Circular references can be resolved and dereferenced just like any other reference. However, if you intend to serialize the dereferenced api as JSON, then you should be aware that JSON.stringify
does not support circular references by default, so you will need to use a custom replacer function.
You can disable circular references by setting the dereference.circular
option to false
. Then, if a circular reference is found, a ReferenceError
will be thrown.
Or you can choose to just ignore circular references altogether by setting the dereference.circular
option to "ignore"
. In this case, all non-circular references will still be dereferenced as normal, but any circular references will remain in the schema.
Another option is to use the bundle
method rather than the dereference
method. Bundling does not result in circular references, because it simply converts external $ref
pointers to internal ones.
"person": {
"properties": {
"name": {
"type": "string"
},
"spouse": {
"type": {
"$ref": "#/person" // circular reference
}
}
}
}