API

āļžāļ·āđ‰āļ™āļāļēāļ™āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ”āđ‰āļ§āļĒ API

API

āđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļĄāļĩāļœāļĨāļīāļ•āļ āļąāļ“āļ‘āđŒāđāļĨāļ°āļšāļĢāļīāļāļēāļĢāļˆāļģāļ™āļ§āļ™āļĄāļēāļāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ­āļļāļ›āļāļĢāļ“āđŒ IoT āđ€āļ›āđ‡āļ™āļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļš āđāļĨāļ°āđƒāļ™āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāđāļĨāļ°āļĢāļ°āļšāļšāđāļ­āļžāļžāļĨāļīāđ€āļ„āļŠāļąāļ™ āļĢāļđāļ›āđāļšāļšāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļ„āļ§āļēāļĄāļ™āļīāļĒāļĄāļ­āļĒāđˆāļēāļ‡āļĄāļēāļāļ„āļ·āļ­āļāļēāļĢāđƒāļŠāđ‰ API (Application Programming Interface) āļ—āļĩāđˆāļˆāļ°āļ—āļģāđƒāļŦāđ‰āļ­āļļāļ›āļāļĢāļ“āđŒāļ•āđˆāļēāļ‡āđ† āļŠāļēāļĄāļēāļĢāļ–āļŠāļ·āđˆāļ­āļŠāļēāļĢāđāļĨāļ°āđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļąāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļ•āļĨāļ­āļ”āļˆāļ™āļŠāļēāļĄāļēāļĢāļ–āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ‚āđ‰āļēāļĄāļĢāļ°āļšāļšāđ„āļ”āđ‰ āļŦāļēāļāļĄāļĩāļāļēāļĢāļ—āļģ API āđ„āļ§āđ‰āđƒāļŦāđ‰āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ‚āļ”āļĒ API āļ„āļ·āļ­āļŠāļļāļ”āļ‚āļ­āļ‡āļ„āļģāļŠāļąāđˆāļ‡āđāļĨāļ°āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ—āļĩāđˆāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļāđˆāđ‚āļ›āļĢāđāļāļĢāļĄāļ•āđˆāļēāļ‡āđ† āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŠāļ·āđˆāļ­āļŠāļēāļĢāļāļąāļ™āđ„āļ”āđ‰ āđ‚āļ”āļĒāļˆāļ°āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ•āļąāļ§āļāļĨāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰ (Client) āđāļĨāļ°āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ (Server) āđ‚āļ”āļĒāđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āđāļšāļšāļĢāđ‰āļ­āļ‡āļ‚āļ­ (Request) āđāļĨāļ°āļ•āļ­āļšāļāļĨāļąāļš (Response)

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ API

āļ‚āđ‰āļ­āļ”āļĩāļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰ API

āļ‚āđ‰āļ­āļ”āļĩāļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰ API āđƒāļ™āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāđāļĨāļ°āļĢāļ°āļšāļšāļĄāļĩāļŦāļĨāļēāļĒāļ­āļĒāđˆāļēāļ‡ āđ€āļŠāđˆāļ™āļāļēāļĢāđƒāļŠāđ‰ API āļŠāļēāļĄāļēāļĢāļ–āđ€āļŠāļ·āđˆāļ­āļĄāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ­āļļāļ›āļāļĢāļ“āđŒ āļĄāļĩāļ„āļ§āļēāļĄāļĢāļ§āļ”āđ€āļĢāđ‡āļ§ āļŠāļēāļĄāļēāļĢāļ–āļ‚āļĒāļēāļĒāđ„āļ”āđ‰āļŦāļēāļāđƒāļ™āļ­āļ™āļēāļ„āļ•āļĄāļĩāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĄāļēāļāļ‚āļķāđ‰āļ™āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļˆāļģāļāļąāļ”āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰ āļĄāļĩāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļđāļ‡

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ‚āļ­āļ‡ API

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ‚āļ­āļ‡ API āđ€āļŠāđˆāļ™āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ­āļļāļ›āļāļĢāļ“āđŒ IoT āļāļąāļšāļĢāļ°āļšāļšāđāļ­āļžāļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļšāļ™āļ„āļĨāļēāļ§āļ”āđŒ āļ—āļģāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ­āđˆāļēāļ™āđ„āļ”āđ‰āļˆāļēāļāđ€āļ‹āļ™āđ€āļ‹āļ­āļĢāđŒāđ„āļ›āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļĨāļ°āđāļŠāļ”āļ‡āļœāļĨāļšāļ™āđāļ­āļžāļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđ„āļ”āđ‰ āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļ­āļļāļ›āļāļĢāļ“āđŒāđ„āļŸāļŸāđ‰āļēāļœāđˆāļēāļ™āļ—āļēāļ‡āđ‚āļ—āļĢāļĻāļąāļžāļ—āđŒ āļāļēāļĢāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļļāļ‚āļ āļēāļžāļ‚āļ­āļ‡āļ„āļ™āđ„āļ‚āđ‰āđāļĨāļ°āđāļŠāļ”āļ‡āđƒāļŦāđ‰āļšāļļāļ„āļĨāļēāļāļĢāļ—āļēāļ‡āļāļēāļĢāđāļžāļ—āļĒāđŒāđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļāļ­āļšāļāļēāļĢāļĢāļąāļāļĐāļē āļāļēāļĢāļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ­āđˆāļēāļ™āļ„āđˆāļēāļĢāļ°āļ”āļąāļšāļ™āđ‰āļģāļĄāļēāđāļŠāļ”āļ‡āļœāļĨāļšāļ™āļŦāļ™āđ‰āļē Dashboard āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™

āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ API

āļāļēāļĢāđ€āļĢāļĩāļĒāļ API āđ€āļ›āđ‡āļ™āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ—āļĩāđˆāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļģāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­ (Request) āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļ API āđāļĨāļ° API āļ—āļģāļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡ (Responses) āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĨāļąāļšāļĄāļēāļ•āļēāļĄāļ„āļģāļĢāđ‰āļ­āļ‡āļ‚āļ­āđ‚āļ”āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāđˆāļ‡āļāļĨāļąāļšāļĄāļēāļˆāļ°āļ­āļĒāļđāđˆāđƒāļ™āļĢāļđāļ›āđāļšāļš JSON āļŦāļĢāļ·āļ­ XML āđ‚āļ”āļ™āļāļĢāļ°āļ—āļģāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ HTTP (Hypertext Transfer Protocol) āđ€āļ›āđ‡āļ™āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļ—āļĩāđˆāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰ (Client) āđāļĨāļ°āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ (Server) āđ‚āļ”āļĒāļĄāļĩāļāļēāļĢāđƒāļŠāđ‰āļ§āļīāļ˜āļĩāļāļēāļĢ (methods) āļ•āđˆāļēāļ‡āđ† āđ„āļ”āđ‰āđāļāđˆ

  • GET: āļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ (āļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ)

  • POST: āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ (āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāļĄāđˆ)

  • PUT: āļ­āļąāļ›āđ€āļ”āļ•āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆāđāļĨāđ‰āļ§āļšāļ™āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ

  • DELETE: āļĨāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ

ðŸ”Ĩ Requirements

Resources
Links

Computer

ðŸ’ŧ

Nodejs Version 20 or later

BDH IoT Data Service API Development

  • Express.js āđ€āļ›āđ‡āļ™āđāļžāđ‡āļ„āđ€āļāļˆ Nodejs āļ—āļĩāđˆāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ API āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāđāļĨāļ°āļĢāļ§āļ”āđ€āļĢāđ‡āļ§ āđ„āļ”āđ‰āļĢāļąāļšāļ„āļ§āļēāļĄāļ™āļīāļĒāļĄāļŠāļđāļ‡ āđ‚āļ”āļĒ Express.js āļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ—āļĩāđˆāļ‡āđˆāļēāļĒāđāļĨāļ°āđ„āļĄāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Path āđāļĨāļ°āļāļģāļŦāļ™āļ” Path āļŠāļģāļŦāļĢāļąāļšāļ—āļģ HTTP Request āđ„āļ”āđ‰

  • Swagger āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢāļŠāļģāļŦāļĢāļąāļšāđƒāļŠāđ‰āļ‡āļēāļ™ API (API Documents) āļ—āļĩāđˆāļˆāļ°āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ—āļ”āļĨāļ­āļ‡āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™ API āđƒāļ™ path āļ•āđˆāļēāļ‡āđ† āđ„āļ”āđ‰āļœāđˆāļēāļ™ Web browser āđ„āļ”āđ‰āđ‚āļ”āļĒāļ•āļĢāļ‡

āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢ āļŠāļĢāđ‰āļēāļ‡ API āļ”āđ‰āļ§āļĒ Express.js

1. āđ€āļ›āļīāļ” vscode āđāļĨāļ°āļŠāļĢāđ‰āļēāļ‡ folder āđƒāļŠāđ‰āļŠāļ·āđˆāļ­āļ§āđˆāļē api-server-workshop

2. āđ€āļ›āļīāļ” folder āļ”āđ‰āļ§āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ vsCode āđāļĨāļ°āļ—āļģāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ nodejs project āļœāđˆāļēāļ™ termial āđ‚āļ”āļĒāđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡

npm init -y
  1. āļˆāļ°āđ„āļ”āđ‰āđ„āļŸāļĨāđŒāļŠāļ·āđˆāļ­āļ§āđˆāļē Package.json āđƒāļ™ folder

  2. āļ—āļģāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Package āļŠāļģāļŦāļĢāļąāļšāđƒāļŠāđ‰āļ‡āļēāļ™

npm install express swagger-jsdoc swagger-ui-express --save
  1. āļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ app.js āđāļĨāļ° āđāļĨāļ°āđ€āļžāļīāđˆāļĄ Code āļ”āđ‰āļēāļ‡āļĨāđˆāļēāļ‡

const express = require('express');
const swaggerJsDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');

const app = express();
app.use(express.json());

// āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē Swagger
const swaggerOptions = {
  swaggerDefinition: {
    openapi: '3.0.0',
    info: {
      title: 'IoT Device API',
      version: '1.0.0',
      description: 'API āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨ IoT Device',
    },
    servers: [
      {
        url: 'http://localhost:3000',
      },
    ],
  },
  apis: ['./app.js'],
};

const swaggerDocs = swaggerJsDoc(swaggerOptions);
app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));

// āļ‚āđ‰āļ­āļĄāļđāļĨāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļŠāļģāļŦāļĢāļąāļš IoT Device
let devices = [
  { id: 1, name: 'Temperature Sensor', type: 'sensor', status: 'active' },
  { id: 2, name: 'Humidity Sensor', type: 'sensor', status: 'inactive' },
];

/**
 * @swagger
 * /devices:
 *   get:
 *     summary: āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨ IoT Devices āļ—āļąāđ‰āļ‡āļŦāļĄāļ”
 *     responses:
 *       200:
 *         description: āļŠāļģāđ€āļĢāđ‡āļˆ
 *         content:
 *           application/json:
 *             schema:
 *               type: array
 *               items:
 *                 type: object
 *                 properties:
 *                   id:
 *                     type: integer
 *                   name:
 *                     type: string
 *                   type:
 *                     type: string
 *                   status:
 *                     type: string
 */
app.get('/devices', (req, res) => {
  res.json(devices);
});

/**
 * @swagger
 * /devices/{id}:
 *   get:
 *     summary: āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨ IoT Device āđ‚āļ”āļĒāđƒāļŠāđ‰ ID
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID āļ‚āļ­āļ‡ IoT Device
 *     responses:
 *       200:
 *         description: āļŠāļģāđ€āļĢāđ‡āļˆ
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 id:
 *                   type: integer
 *                 name:
 *                   type: string
 *                 type:
 *                   type: string
 *                 status:
 *                   type: string
 *       404:
 *         description: āđ„āļĄāđˆāļžāļšāļ­āļļāļ›āļāļĢāļ“āđŒ
 */
app.get('/devices/:id', (req, res) => {
  const device = devices.find((d) => d.id === parseInt(req.params.id));
  if (!device) return res.status(404).send('āđ„āļĄāđˆāļžāļšāļ­āļļāļ›āļāļĢāļ“āđŒ');
  res.json(device);
});

/**
 * @swagger
 * /devices:
 *   post:
 *     summary: āđ€āļžāļīāđˆāļĄ IoT Device āđƒāļŦāļĄāđˆ
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               name:
 *                 type: string
 *               type:
 *                 type: string
 *               status:
 *                 type: string
 *     responses:
 *       201:
 *         description: āļŠāļĢāđ‰āļēāļ‡āļ­āļļāļ›āļāļĢāļ“āđŒāđƒāļŦāļĄāđˆāļŠāļģāđ€āļĢāđ‡āļˆ
 */
app.post('/devices', (req, res) => {
  const newDevice = {
    id: devices.length + 1,
    name: req.body.name,
    type: req.body.type,
    status: req.body.status,
  };
  devices.push(newDevice);
  res.status(201).json(newDevice);
});

/**
 * @swagger
 * /devices/{id}:
 *   put:
 *     summary: āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨ IoT Device āđ‚āļ”āļĒāđƒāļŠāđ‰ ID
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID āļ‚āļ­āļ‡ IoT Device
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               name:
 *                 type: string
 *               type:
 *                 type: string
 *               status:
 *                 type: string
 *     responses:
 *       200:
 *         description: āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāđ€āļĢāđ‡āļˆ
 *       404:
 *         description: āđ„āļĄāđˆāļžāļšāļ­āļļāļ›āļāļĢāļ“āđŒ
 */
app.put('/devices/:id', (req, res) => {
  const device = devices.find((d) => d.id === parseInt(req.params.id));
  if (!device) return res.status(404).send('āđ„āļĄāđˆāļžāļšāļ­āļļāļ›āļāļĢāļ“āđŒ');

  device.name = req.body.name;
  device.type = req.body.type;
  device.status = req.body.status;

  res.json(device);
});

/**
 * @swagger
 * /devices/{id}:
 *   delete:
 *     summary: āļĨāļš IoT Device āđ‚āļ”āļĒāđƒāļŠāđ‰ ID
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID āļ‚āļ­āļ‡ IoT Device
 *     responses:
 *       200:
 *         description: āļĨāļšāļ­āļļāļ›āļāļĢāļ“āđŒāļŠāļģāđ€āļĢāđ‡āļˆ
 *       404:
 *         description: āđ„āļĄāđˆāļžāļšāļ­āļļāļ›āļāļĢāļ“āđŒ
 */
app.delete('/devices/:id', (req, res) => {
  const deviceIndex = devices.findIndex((d) => d.id === parseInt(req.params.id));
  if (deviceIndex === -1) return res.status(404).send('āđ„āļĄāđˆāļžāļšāļ­āļļāļ›āļāļĢāļ“āđŒ');

  devices.splice(deviceIndex, 1);
  res.send('āļĨāļšāļ­āļļāļ›āļāļĢāļ“āđŒāļŠāļģāđ€āļĢāđ‡āļˆ');
});

// āđ€āļĢāļīāđˆāļĄāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server is running on port ${PORT}`));
  1. Run Code āļ”āđ‰āļ§āļĒāļ„āļģāļŠāļąāđˆāļ‡āđƒāļ™ termianl

node app.js
āļāļēāļĢ Run Code
  1. āđ€āļ›āļīāļ” Web Browser āļ—āļĩāđˆ http://localhost:3000/docs āļˆāļ°āđ„āļ”āđ‰āļŦāļ™āđ‰āļē API Docs

āļŦāļ™āđ‰āļē API Doc

Last updated

Was this helpful?