Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/grinat/moleculer-auto-openapi
Auto generate openapi(swagger) scheme for molecular
https://github.com/grinat/moleculer-auto-openapi
Last synced: 2 months ago
JSON representation
Auto generate openapi(swagger) scheme for molecular
- Host: GitHub
- URL: https://github.com/grinat/moleculer-auto-openapi
- Owner: grinat
- Created: 2020-12-14T18:14:59.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2023-12-22T08:33:46.000Z (about 1 year ago)
- Last Synced: 2024-11-03T04:06:29.135Z (2 months ago)
- Language: JavaScript
- Size: 130 KB
- Stars: 29
- Watchers: 2
- Forks: 20
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-moleculer - moleculer-auto-openapi - Auto generate OpenAPI (Swagger) scheme for Moleculer services. (Tools / GraphQL)
README
# moleculer-auto-openapi
Auto generate openapi(swagger) scheme for molecular.
Scheme generated based on action validation params, routes on all avalaibled services and paths in ApiGateway.## Install
```shell script
npm i moleculer-auto-openapi --save
```## Usage
Create openapi.service.js with content:
```javascript
const Openapi = require("moleculer-auto-openapi");module.exports = {
name: 'openapi',
mixins: [Openapi],
settings: {
// all setting optional
openapi: {
info: {
// about project
description: "Foo",
title: "Bar",
},
tags: [
// you tags
{ name: "auth", description: "My custom name" },
],
components: {
// you auth
securitySchemes: {
myBasicAuth: {
type: 'http',
scheme: 'basic',
},
},
},
},
},
}
```
And add resolvers to your webapi service:
```javascript
module.exports = {
name: `api`,
mixins: [ApiGateway],
settings: {
routes: [
// moleculer-auto-openapi routes
{
path: '/api/openapi',
aliases: {
'GET /openapi.json': 'openapi.generateDocs', // swagger scheme
'GET /ui': 'openapi.ui', // ui
'GET /assets/:file': 'openapi.assets', // js/css files
},
},
],
},
};
```Describe params in service:
```javascript
module.exports = {
actions: {
update: {
openapi: {
summary: "Foo bar baz",
},
params: {
$$strict: "remove",
roles: { type: "array", items: "string", enum: [ "user", "admin" ] },
sex: { type: "enum", values: ["male", "female"], default: "female" },
id: { type: "number", convert: true, default: 5 },
numberBy: "number",
someNum: { $$t: "Is some num", type: "number", convert: true },
types: {
type: "array",
$$t: "Types arr",
default: [{ id: 1, typeId: 5 }],
length: 1,
items: {
type: "object", strict: "remove", props: {
id: { type: "number", optional: true },
typeId: { type: "number", optional: true },
},
},
},
bars: {
type: "array",
$$t: "Bars arr",
min: 1,
max: 2,
items: {
type: "object", strict: "remove", props: {
id: { type: "number", optional: true },
fooNum: { $$t: "fooNum", type: "number", optional: true },
},
},
},
someObj: {
$$t: "Some obj",
default: { name: "bar" },
type: "object", strict: "remove", props: {
id: { $$t: "Some obj ID", type: "number", optional: true },
numberId: { type: "number", optional: true },
name: { type: "string", optional: true, max: 100 },
},
},
someBool: { type: "boolean", optional: true },
desc: { type: "string", optional: true, max: 10, min: 4, },
email: "email",
date: "date|optional|min:0|max:99",
uuid: "uuid",
url: "url",
shortObject: {
$$type: "object",
desc: { type: "string", optional: true, max: 10000 },
url: "url",
},
shortObject2: {
$$type: "object|optional",
desc: { type: "string", optional: true, max: 10000 },
url: "url",
},
password: { type: 'string', min: 8, pattern: /^[a-zA-Z0-9]+$/ },
password2: { type: 'string', min: 8, pattern: '^[a-zA-Z0-9]+$' }
},
handler() {},
},
},
}
```
end etc. See test/openapi.mixin.spec.js for examples