1. swagger폴더에 swagger.js를 생성한다.
//swagger.js
const swaggerUi = require('swagger-ui-express');
const swaggereJsdoc = require('swagger-jsdoc');
const options = {
swaggerDefinition: {
info: {
title: 'Public Data API',
version: '3.0.0',
description: '공공데이터 조회 API',
},
host: 'localhost:3000',
basePath: '/'
},
apis: ['./src/swagger/*.js']
};
const specs = swaggereJsdoc(options);
module.exports = {
swaggerUi,
specs
};
2. app.js에서 swagger를 미들웨어로 호출한다.
//app.js
const express = require("express");
const cors = require("cors");
const morgan = require("morgan");
const { swaggerUi, specs } = require('./src/swagger/swagger');
const routes = require("./src/routers");
const createApp = () => {
const app = express();
app.use(express.json());
app.use(cors());
app.use(morgan("dev"));
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs));
app.use(routes);
return app;
};
module.exports = { createApp };
3. swagger폴더에 index.js를 생성한 후 swagger 스키마 작성한다.
//index.js
/**
* @swagger
* /news/{category}/{year}:
* get:
* tags:
* - 뉴스 빅데이터 조회
* description: 2020~2021 코로나 및 메타버스 뉴스 빅데이터 조회하기
* produces:
* - application/json
* parameters:
* - in: path
* name: category
* description : 1. corona 2. metabus
* required: false
* schema:
* type: string
* examples :
* Samples : 2007
* summary : A sample for MetaBus
* - in: path
* name: year
* description : 연도
* required: false
* schema:
* type: string
* responses:
* 200:
* description: 공공데이터 조회 성공
* 400:
* description: 데이터가 존재하지 않음
*/
4. apis의 주소를 app.js를 기준으로 index.js의 상대주소로 변경한다.
//swagger.js
apis: ['./src/swagger/*.js']
apis의 주소를 swagger.js를 기준으로 index.js의 상대주소로 하게 되면 다음과 같이 스키마가 나오지 않는다.
📣내생각
결국 postman은 swagger보다 쉽고 더 다양한 기능을 제공하지만 비공개소스이자, 데스크탑 애플리케이션이며, swagger은 오픈소스이며, 사용자가 직접 API 문서화를 위한 코드를 작성함으로, 문서화하는 것에 더 적합하다.