- [Node.js] Swagger을 이용한 API 문서 생성2024년 01월 24일 17시 27분 23초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. Swagger 설치
swagger-ui-express, swagger-autogen를 설치한다. swagger-ui-express는 서버 구동 시 API 문서를 볼 수 있게 해 주고, swagger-autogen는 API 문서 정보를 담고 있는 swagger-output.json을 자동으로 생성해 준다.
npm install swagger-ui-express swagger-autogen
2. ES Modules
ES Modules 방식은 아래와 같이 Swagger json 파일을 import 하면 된다. 이때 주의할 것은 assert { type: "json"}을 추가하지 않으면 TypeError가 발생한다.
// app.js import swaggerFile from "./swagger/swagger-output.json" assert { type: "json" }; import swaggerUi from "swagger-ui-express";
그 외에는 Swagger Autogen 공식 문서(https://swagger-autogen.github.io/docs/getting-started/quick-start)를 참고하면 된다.
3. API Base 경로 설정
나의 경우 베이스 경로가 "/api/v1"에 API의 유형에 따라 "/ap" 또는 "/promo"를 각각 추가하는 형태로 되어 있었다. 여기에 개별 API의 경로가 추가되는 형태이다. 아래는 예시이다.
http://localhost:3000/api/v1/promo/promo-list
이런 경로를 감안하지 않고 Swagger UI에서 API 호출 테스트를 하기 위해 [그림 1]과 같이 "Try it out" 버튼을 눌러 API를 호출하면 아래와 같은 경로로 호출하여 에러가 발생한다.
http://localhost:3000/promo-list // 잘못된 요청 에러
나의 경우 각 API별로 # swagger.path 속성을 추가해 주어 이러한 문제를 해결했다.
// route/v1_promo.js import express from "express"; const router = express.Router(); import { queryPromo } from "../mysql/index.js"; router.get("/promo-list", async (req, res) => { /* #swagger.tags = ['홍보 관련'] #swagger.summary = '홍보 리스트 조회' #swagger.description = 'Client에서 홍보리스트를 요청하고, Server는 홍보리스트를 응답한다.' #swagger.path = "/promo/promo-list" } */ const result = await queryPromo("promotions"); res.send(result); }); export { router };
참고로 swagger.js에서의 베이스 경로 설정은 아래와 같다.
// swagger.js import swaggerAutogen from "swagger-autogen"; import * as dotenv from "dotenv"; dotenv.config(); const doc = { info: { // (생략) }, host: "localhost:3000", basePath: `/api/${process.env.ROUTE_VERSION}`, schemes: ['http'] // 기본값 http }; // (생략)
schemes의 기본 값이 http이기 때문에 생략 가능하다. 하지만 https로 변경해야 한다면 schemes 속성을 반드시 추가해주어야 한다.
4. swagger-output.json 생성
프로젝트 실행전 아래 명령어로 swagger-out.json을 생성한다.
npm run swagger
728x90반응형'언어·프레임워크 > Node.js' 카테고리의 다른 글
[Node.js] MySQL 날짜, 시간이 왜 UTC 시간으로 조회될까? (0) 2024.01.29 [Node.js] API 서버에 api-key 적용 및 Swagger 문서화 (0) 2024.01.25 [Node.js][Trouble Shooting] sqlMessage: "Access denied for user 'root'@'localhost' (using password: NO)" (0) 2022.10.08 [Node.js] [문제해결] Vue.js에서 마이크로소프트 액세스 mdb 파일을 읽어 오려다가... SyntaxError (0) 2022.05.25 [Node.js][유튜브 강의 노트] 개발자의품격_Node.js에서 API 서버 만들기 (0) 2021.11.28 다음글이 없습니다.이전글이 없습니다.댓글