Clone localmente tu repositorio restapi.
Desde la línea de comandos, dentro del proyecto instale los módulos swagger-autogen y swagger-ui-express
npm install swagger-autogen swagger-ui-express
En la raíz del proyecto, cree el archivo de configuración de ./swagger.js
con el siguiente contenido:
const swaggerAutogen = require('swagger-autogen')()
const doc = {
"info": {
"title": 'REST API',
"description": 'REST API with Express and Firestore'
},
"host": 'localhost:5000',
"basePath": "/api",
};
const outputFile = './swagger_output.json'
const endpointsFiles = ['./routes/*.js']
swaggerAutogen(outputFile, endpointsFiles, doc)
Modifique el controlador ./controllers/itemControllers.js
con la descripción de cada función.
...
exports.getItem = async (req, res) => {
/*
#swagger.tags = ['Items']
#swagger.description = 'Get an item entry'
#swagger.summary = 'Get an item entry'
#swagger.parameters['id'] = {
description: 'Item id',
required: true,
}
#swagger.responses[404] = {
description: 'Item not found',
}
#swagger.responses[400] = {
description: 'Bad request',
}
#swagger.responses[200] = {
description: 'Get an item by id',
}
*/
...
}
exports.getAllItems = async (req, res) => {
/*
#swagger.tags = ['Items']
#swagger.description = 'Get all items entries'
#swagger.summary = 'Get all items entries'
#swagger.responses[200] = {
description: 'Items entries successfully obtained',
}
#swagger.responses[400] = {
description: 'Bad request',
}
*/
...
}
exports.createItem = async (req, res) => {
/*
#swagger.tags = ['Items']
#swagger.description = 'Create an item'
#swagger.summary = 'Create an item'
#swagger.parameters['data'] = {
in: 'body',
description: 'Data to create an item',
required: true,
}
#swagger.responses[201] = {
description: 'Item successfully created',
}
#swagger.responses[400] = {
description: 'Bad request',
}
*/
...
}
...
Modifique el archivo package.json
y agregue la entrada swagger.
...
"scripts": {
...
"swagger": "node ./swagger.js"
...
},
...
Desde la línea de comandos, genere el archivo de configuración (./swagger_output.json
) de Swagger, con el comando:
npm run swagger
Modifique el archivo con el servidor server.js con la referencia al módulo swagger-ui-express y al archivo generado swagger_output.json. Además, agregue la ruta a la documentación.
const admin = require('firebase-admin');
...
/* Referencia al módulo swagger-ui-express */
const swaggerUi = require('swagger-ui-express')
/* Referencia al archivo con la descripción */
const swaggerFile = require('./swagger_output.json')
...
const app = express();
...
/* Ruta Base -> Documentación */
app.use('/documentation', swaggerUi.serve, swaggerUi.setup(swaggerFile))
app.use('/api', require('./routes/api'));
...
Ejecute el servidor, con:
npm start
(STOP 1) Compruebe los endpoints
de la documentación http://localhost:5000/documentation
Crea una colección desde la plantilla.
(STOP 2) Modifique el URL del requerimiento Get data. Realice el requerimiento.
En grupos de tres (3) personas, completen las siguientes tareas. Pueden utilizar la documentación oficial o un LLM.
Complete la documentación para los métodos updateItem y deleteItem.
...
exports.updateItem = async (req, res) => {
/*
#swagger.tags = ['Items']
#swagger.description = ''
#swagger.summary = ''
#swagger.parameters['id'] = {
description: '',
required: true,
}
#swagger.parameters['data'] = {
in: 'body',
description: '',
required: true,
}
#swagger.responses[200] = {
description: '',
}
#swagger.responses[400] = {
description: '',
}
*/
...
};
exports.deleteItem = async (req, res) => {
/*
#swagger.tags = ['Items']
#swagger.description = ''
#swagger.summary = ''
#swagger.parameters['id'] = {
description: '',
required: true,
}
#swagger.responses[200] = {
description: '',
}
#swagger.responses[400] = {
description: '',
}
*/
...
}
...
./swagger_output.json
) de SwaggerCompruebe los endpoints
de la documentación http://localhost:5000/documentation
Modifique el URL de requerimientos POST, PUT y DELETE en Postman. En los requerimientos con datos en el cuerpo del mensaje HTTTP, acceda a la opción Body > raw y escriba el objeto JSON a enviar.
/* POST */
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
}
/* PUT */
{
"name": "Ant Man",
"age": 46,
"secretIdentity": "Scott Lang",
"powers": [
"Genius-level intellect",
"Size-shifting from nearly microscopic to ~100 feet gigantic (both at extremes)"
]
}
🚀 Made significant progress today on our Project Management System! Integrated centralized Swagger documentation for clear API understanding. Also, added endpoints for projects and tasks. Excited to see it coming together! 💻🔨 #MERNStack #ProjectManagement #SwaggerUI pic.twitter.com/ZP3iin9RMa
— Aditya Rawas (@rawas_aditya) October 5, 2023
swagger, documentación