Anyspec is a DSL (Domain Specific Language) for writing API specs with main compilation target to Openapi (swagger).
The main problem we are trying to solve is the verbosity of open API.
- Write less code - get rid of boileprate in your daily routine.
- Enforce best practices - use predefined or write your own rules for specs.
- Prettify (WIP) - format your code without pain.
- Compilation (WIP) - the result json is fully compatible with openapi specification.
| Built by 2 engineers for Osome with love ❤️ | |
Before
// **Some description** @token POST /documents DocumentNew => { document: Document } DocumentNew { name: s, } DocumentNew { id: i, name: s, } After
{ "swagger": "2.0", "info": { "title": "Test API", "version": "{{version}}" }, "host": "{{host}}", "basePath": "/api/v2", "schemes": [ "https" ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "securityDefinitions": { "token": { "name": "X-Access-Token", "type": "apiKey", "in": "header" } }, "paths": { "/documents": { "post": { "summary": "**Some description**", "description": "**Some description**", "operationId": "POST--documents", "responses": { "200": { "description": "", "schema": { "type": "object", "properties": { "document": { "$ref": "#/definitions/Document" } }, "required": [ "document" ] } } }, "security": [ { "token": [] } ], "parameters": [ { "name": "body", "required": true, "schema": { "$ref": "#/definitions/DocumentNew" }, "in": "body" } ] } } }, "definitions": { "DocumentNew": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" } }, "required": [ "id", "name" ] } } }The main idea of library - DSL on top of openapi comes from tinyspec. The syntax constructions comes from tinyspec too.
Also authors were inspired and use a lot of findings and ideas from:
The code in this project is released under the MIT License.