-
[ NodeJS ] express에서 swagger로 API 명세서 만들기Topic/Node.js | server 2023. 4. 15. 10:40반응형
포스트맨으로 API 명세서로 활용하고 있었는데 API 서버 정보가 포스트맨 서버에 저장되는 문제가 우려돼 swagger로 자체 API 서버에 연결을 해서 해결을 해보려고 한다.
npm i swagger-jsdoc swagger-ui-express —save -dev
- swagger-jsdoc: jsdoc 주석으로 api 문서를 표현하는 용도
- swagger-ui-express: swagger와 express 연결하는 용도
project/swagger/swagger.js
const swaggerUi = require("swagger-ui-express") const swaggereJsdoc = require("swagger-jsdoc") const CONFIG = require('../config/config'); const options = { swaggerDefinition: { openapi: "3.0.0", info: { version: "1.0.0", title: “project-backend", description: "프로젝트 설명 Node.js Swaager swagger-jsdoc 방식 RestFul API 클라이언트 UI", }, servers: [ { url: `http://localhost:${CONFIG.port}` || 'http://localhost:3000', // 요청 URL }, ], }, apis: ["./routes/*.js", "./controllers/*.js"], // Swagger 파일 연동 } const specs = swaggereJsdoc(options) module.exports = { swaggerUi, specs }
project/app.js
const { ReE } = require('./services/util.service'); app.use(cors()); app.use('/v1', v1); const { swaggerUi, specs } = require("./swagger/swagger") const swaggerJsdoc = require('swagger-jsdoc') app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(specs, {explorer: true}))
이제 /api-docs 경로를 들어가보면
정상적인 웹페이지를 확인할 수 있다.
이제 API 문서화를 진행해보자.
project/routes/v1.js
/** comment.controller **/ /** * @swagger * tags: * name: Comments * */ // comment 등록 router.post('/comments', winstonLogger.loggingHeader, CommentController.addComment); /** * @swagger * paths: * /v1/comments: * post: * summary: "comment 등록" * description: "유저가 작성한 comment 등록" * tags: [Comments] * responses: * "201": * description: 등록된 comment 정보 * content: * application/json: * schema: * type: object * properties: * message: * type: string * example: "Add comment success" * data: * type: object * example: * { * "msg": "hi", * "like": 777, * "type": "normal", * "_id": "63e0d4225d4fe1d514d52be6", * "createdAt": "2023-02-06T10:19:14.275Z", * "updatedAt": "2023-02-06T10:19:14.275Z", * } * success: * type: boolean * example: true * * */
정상적으로 API들이 뜨는 것을 확인할 수 있다.
** 유의할 점은 주석을 작성할 시 tab을 누르면 사용자의 작업환경에 따라 tab의 길이가 다르기 때문에 오류가 발생할 수 있다.
-> 그래서 스페이스바로 간격을 잘 확인한 뒤 작성하길 추천한다.
반응형'Topic > Node.js | server' 카테고리의 다른 글
[ NodeJS ] Logger | .gz / gz파일 확인하기 (log.gz) (0) 2023.06.03 [ NodeJS ] 백엔드 재부팅 시 PM2 자동실행 설정 (0) 2023.05.27 API 문서작성(명세서)에 관한 비교 (Swagger vs Postman vs GitBook) (0) 2023.03.24 [ NodeJS ] express에서 swagger로 API 명세서 만들기 (0) 2023.02.18 [ NodeJS] moment-timezone을 이용해 로컬과 EC2 서버 시간 동기화 (0) 2023.02.04