NodeJeando, con swagger.
en esta oportunidad, nos toca ver como una simple app, con una API minimal, de una estructura mockeada, nos puede servir para alimentar swagger.
para esto, tenemos que tener los modulos
npm install express swagger swagger-ui swagger-ui-express body-parser
La página de donde saqué todo esto es
https://medium.com/bb-tutorials-and-thoughts/how-to-add-swagger-to-nodejs-rest-api-7a542cfdc5e1
y lo que sigue ahora es , la app, y la llamada a swagger.
comenté en un primer paso, el tema de los css.
const randomId = require('random-id'); const app = express(), bodyParser = require("body-parser"), fs = require('fs'), port = 3080; const swaggerUi = require('swagger-ui-express'); const swaggerDocument = require('./swagger.json'); //const customCss = fs.readFileSync((process.cwd() + "/swagger.css"), 'utf8'); // place holder for the data let tasks = [ { id: 1, task: 'task1', assignee: 'assignee1000', status: 'completed' }, { id: 2, task: 'task2', assignee: 'assignee1001', status: 'completed' }, { id: 3, task: 'task3', assignee: 'assignee1002', status: 'completed' }, { id: 4, task: 'task4', assignee: 'assignee1000', status: 'completed' }, ]; app.use(bodyParser.json()); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument, { customCss })); app.get('/api/todos', (req, res) => { console.log('api/todos called!!!!!') res.json(tasks); }); app.post('/api/todo', (req, res) => { const task = req.body.task; task.id = randomId(10); tasks.push(task); res.json(tasks); }) app.delete('/api/todo/:id', (req, res) => { console.log("Id to delete:::::", req.params.id) tasks = tasks.filter(task => task.id != req.params.id); res.json(tasks); }) app.put('/api/todos/:id', (req, res) => { console.log("Id to update:::::", req.params.id) const taskToUpdate = req.body.task; tasks = tasks.map(task => { if (task.id == req.params.id) { task = taskToUpdate; task.id = parseInt(req.params.id); } return task; }); res.json(tasks); }); app.get('/', (req, res) => { res.send(`<h1>API Running on port ${port}</h1>`); }); app.listen(port, () => { console.log(`Server listening on the port::::::${port}`); }); |
y la llamada a swagger.json
"swagger": "2.0", "info": { "description": "This is a simple example NodeJS API project to demonstrate Swagger Documentation", "version": "1.0.0", "title": "Tasks API", "contact": { "email": "abc@gmail.com" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, "schemes": ["http"], "host": "localhost:3080", "basePath": "/api", "paths" : { "/todos" : { "get" : { "summary" : "Get all the tasks", "description": "Get all the tasks", "produces": ["application/json"], "parameters": [], "responses": { "200": { "description": "successful operation", "schema": { "type": "array", "items": { "$ref": "#/definitions/todosResponse" } } }, "400": { "description": "Invalid status value", "schema": { "$ref": "#/definitions/InvalidResponse" } } } } }, "/todo" : { "post" : { "summary" : "Save the task", "description": "Save the task", "produces": ["application/json"], "consumes": ["application/json"], "parameters": [ { "in": "body", "name": "body", "description": "task object", "required": true, "schema": { "type": "object", "properties": { "task": { "type": "object", "$ref": "#/definitions/Task" } } } } ], "responses": { "200": { "description": "successful operation", "schema": { "type": "array", "items": { "$ref": "#/definitions/todosResponse" } } }, "400": { "description": "Invalid status value", "schema": { "$ref": "#/definitions/InvalidResponse" } } } } }, "/todos/{id}" : { "put" : { "summary" : "Update the tasks", "description": "Update the tasks", "produces": ["application/json"], "parameters": [ { "name": "id", "in": "path", "description": "task id that needs to be deleted", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "task object", "required": true, "schema": { "type": "object", "properties": { "task": { "type": "object", "$ref": "#/definitions/Task" } } } } ], "responses": { "200": { "description": "successful operation", "schema": { "type": "array", "items": { "$ref": "#/definitions/todosResponse" } } }, "400": { "description": "Invalid status value", "schema": { "$ref": "#/definitions/InvalidResponse" } } } } }, "/todo/{id}" : { "delete" : { "summary" : "Delete the task", "description": "Delete the task", "produces": ["application/json"], "parameters": [ { "name": "id", "in": "path", "description": "task id that needs to be deleted", "required": true, "type": "string" } ], "responses": { "200": { "description": "successful operation", "schema": { "type": "array", "items": { "$ref": "#/definitions/todosResponse" } } }, "400": { "description": "Invalid status value", "schema": { "$ref": "#/definitions/InvalidResponse" } } } } } }, "definitions": { "todosResponse": { "type": "object", "properties": { "id": { "type": "integer" }, "task": { "type": "string" }, "assignee": { "type": "string" }, "status": { "type": "string" } } }, "Task": { "type": "object", "properties": { "task": { "type": "string" }, "assignee": { "type": "string" }, "status": { "type": "string" } } }, "InvalidResponse": { "type": "object", "properties": { "statusCode": { "type": "string" }, "message": { "type": "string" } } } } |
No comments:
Post a Comment