Last active
March 12, 2019 00:47
-
-
Save tbarn/50a068081f9bd52ea8bcf5fda029b151 to your computer and use it in GitHub Desktop.
This is an example of linting an OpenAPI 3 document with Spectral and Node.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This example is designed to be using Spectral (https://github.com/stoplightio/spectral#installation) and Node.js (https://nodejs.org/) | |
// If you have both installed locally, it can be run with the command: node test-oas3.js | |
const { Spectral } = require('@stoplight/spectral'); | |
const { oas3Functions, oas3Rules } = require('@stoplight/spectral/rulesets/oas3'); | |
// an OAS 3 document | |
var myOAS = { | |
"openapi": "3.0.0", | |
"info": { | |
"version": "1.0.0", | |
"title": "Swagger Petstore", | |
"license": { | |
"name": "MIT" | |
} | |
}, | |
"servers": [ | |
{ | |
"url": "http://petstore.swagger.io/v1" | |
} | |
], | |
"paths": { | |
"/pets": { | |
"get": { | |
"summary": "List all pets", | |
"operationId": "listPets", | |
"tags": [ | |
"pets" | |
], | |
"parameters": [ | |
{ | |
"name": "limit", | |
"in": "query", | |
"description": "How many items to return at one time (max 100)", | |
"required": false, | |
"schema": { | |
"type": "integer", | |
"format": "int32" | |
} | |
} | |
], | |
"responses": { | |
"200": { | |
"description": "A paged array of pets", | |
"headers": { | |
"x-next": { | |
"description": "A link to the next page of responses", | |
"schema": { | |
"type": "string" | |
} | |
} | |
}, | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/Pets" | |
} | |
} | |
} | |
}, | |
"default": { | |
"description": "unexpected error", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/Error" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"post": { | |
"summary": "Create a pet", | |
"operationId": "createPets", | |
"tags": [ | |
"pets" | |
], | |
"responses": { | |
"201": { | |
"description": "Null response" | |
}, | |
"default": { | |
"description": "unexpected error", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/Error" | |
} | |
} | |
} | |
} | |
} | |
} | |
}, | |
"/pets/{petId}": { | |
"get": { | |
"summary": "Info for a specific pet", | |
"operationId": "showPetById", | |
"tags": [ | |
"pets" | |
], | |
"parameters": [ | |
{ | |
"name": "petId", | |
"in": "path", | |
"required": true, | |
"description": "The id of the pet to retrieve", | |
"schema": { | |
"type": "string" | |
} | |
} | |
], | |
"responses": { | |
"200": { | |
"description": "Expected response to a valid request", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/Pets" | |
} | |
} | |
} | |
}, | |
"default": { | |
"description": "unexpected error", | |
"content": { | |
"application/json": { | |
"schema": { | |
"$ref": "#/components/schemas/Error" | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
}, | |
"components": { | |
"schemas": { | |
"Pet": { | |
"required": [ | |
"id", | |
"name" | |
], | |
"properties": { | |
"id": { | |
"type": "integer", | |
"format": "int64" | |
}, | |
"name": { | |
"type": "string" | |
}, | |
"tag": { | |
"type": "string" | |
} | |
} | |
}, | |
"Pets": { | |
"type": "array", | |
"items": { | |
"$ref": "#/components/schemas/Pet" | |
} | |
}, | |
"Error": { | |
"required": [ | |
"code", | |
"message" | |
], | |
"properties": { | |
"code": { | |
"type": "integer", | |
"format": "int32" | |
}, | |
"message": { | |
"type": "string" | |
} | |
} | |
} | |
} | |
} | |
}; | |
// create a new instance of spectral with all of the baked in rulesets | |
const spectral = new Spectral(); | |
spectral.addFunctions(oas3Functions()); | |
spectral.addRules(oas3Rules()); | |
spectral.addRules({ | |
// .. extend with your own custom rules | |
}); | |
// run! | |
const results = spectral.run(myOAS); | |
console.log(JSON.stringify(results, null, 4)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment