[Module] Swagger

2020. 9. 18. 17:43개발/[React]

쓰게 된 이유?

전에 했었던 프로젝트에서 Spring으로 Swagger를 적용한 적이 있다.

Swagger를 사용했을 때 API규약에 따라서 명세서(?) 같은 느낌이 들어 좋아

현재 회사에서 진행하고 있는 프로젝트 또한 Swagger를 사용해보고자 한다.

Swagger란?

개발자가 REST API 서비스를 설계, 빌드, 문서화할 수 있도록 하는 프로젝트이다.

Swagger는 다음과 같은 경우에 유용하게 사용된다.

  • 다른 개발팀과 협업을 진행할 경우
  • 이미 구축되어있는 프로젝트에 대한 유지보수를 진행할 경우
  • 백엔드의 API를 호출하는 프론트엔드 프로그램을 제작할 경우

Swagger - Nodejs

npm install swagger-ui-express swagger-jsdoc

사용하는 방법.

/public/swaggerDoc.js

const swaggerJsdoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');
const options = {
    swaggerDefinition: {
        info: {
            title: 'TEST',
            version: '1.0.0',
            description: 'test',
        },
        basePath: '/'
    },
    apis: ['../routes/options.js'],
};
const specs = swaggerJsdoc(options);

module.exports = app=>{
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs))
}

routes/options.js

/**
 * @swagger
 * /restriction/words/:chat_id:
 *   get:
 *     description: Returns words
 *     produces:
 *      - application/json
 *     responses:
 *       200:
 *         description: users
 *         schema:
 *           type: array
 *           items:
 *             $ref: '#/definitions/User'
 */
--> 아직 완성 된 것은 아니라 대충 써놨다.
router.get('/restriction/words/:chat_id', (req,res) => {
    const request = {
        chat_id : req.params.chat_id
    };
    chat_blacklist.findByChatId(request)
        .then(result=>{
            res.send(result);
        })
        .catch(()=>{
            res.send("false");
        });
});

app.js

const swaggerDoc = require('./public/swaggerDoc')

const app = express();

swaggerDoc(app);

app.use('/users', usersRouter);

등등등.. 

아직 프로젝트를 만드시지 않았더라면!

npm install swagger 

-- after --

swagger start project

자세한 건 아래의 링크를 참고하면 될 것 같다.

https://github.com/swagger-api/swagger-node

https://www.youtube.com/watch?v=MUZ5u8af4Qk&list=PLRx0vPvlEmdAezo0wkmUdT6WBCch0_1ie&index=4

'개발 > [React]' 카테고리의 다른 글

[Syntax] Async & await  (0) 2020.09.10
[React] Promise  (0) 2020.09.10