...
API 서버 버젼 관리
보통 API 서버 소스의 라우터 부분을 보면 파일이 V1, V2 이런식으로 되어 있을 것이다.
라우터의 이름인 v1은 버전 1이라는 뜻이다.
라우터 파일 마다 버전을 붙이는 이유는 한 번 버전이 정해진 이후에는 라우터를 함부로 수정하면 안 되기 때문이다.
왜냐하면 다른 사람이나 서비스가 기존 API를 쓰고 있음을 항상 염두에 두어야 하기 때문이다.
따라서 기존의 API 서버의 코드를 바꾸면, 이전 API를 사용 중인 프로그램들이 오작동할 수 있기 때문에, 기존 사용자에게 영향을 미칠 정도로 수정해야 한다면 버전을 올린 라우터를 새로 추가하고, 이전 API를 사용하는 사람들에게 새로운 API가 나왔음을 알리는 것이 좋다.
이를 Deprecated 처리 라고 한다.
또한 이전 API를 없앨 때에도 어느 정도 기간을 두고 미리 공지한 후 다음 API로 충분히 넘어갔을 때 없애는 것이 좋을 것이다.
Deprecated 처리하기
deprecated 처리 구현 방법은 간단하다.
express의 미들웨어 원리를 이용하면 간단하게 구현할 수 있는데, 간단히 사용자 미들웨어를 구현해서 next()를 중간에 막아버리면 되기 때문이다.
우선 사용자 미들웨어 파일(middleware.js)를 만들어주고, 안에다 사용자 정의 함수를 작성한다.
//* 버젼 업을 통해 더이상 사용되지 않을때 알려줌 deprecated
exports.deprecated = (req, res) => {
res.status(410).json({
code: 410,
message: '새로운 버전이 나왔습니다. 새로운 버전을 사용하세요.',
});
};
그리고 api 라우팅 에 사용되는 라우터 파일(V1.js)의 개별 라우터들에 붙여 주면 된다.
//! deprecated 된 구버젼
const { verifyToken, deprecated } = require('./middlewares'); // 작성한 사용자 정의 함수 deprecated를 가져온다
const { Domain, User, Post, Hashtag } = require('../models');
const router = express.Router();
//! deprecated
//* 토큰 인증 테스트용
router.get('/test', deprecated, verifyToken, (req, res) => {
... 코드
});
//! deprecated
// 내 포스팅을 제공해주는 api
router.get('/posts/my', deprecated, verifyToken, (req, res) => {
... 코드
});
//! deprecated hashtag검색을 통해
// 포스트를 제공하는 api
router.get('/posts/hashtag/:title', deprecated, verifyToken, async (req, res) => {
... 코드
});
아니면, 파일의 라우터의 코드들이 너무 많아 일일히 deprecated를 붙여주기 힘들다면, 아예 상단에 router.use()를 선언하면 그 밑의 라우터 실행들을 막을 수 있다.
//! deprecated 된 구버젼
const { verifyToken, deprecated } = require('./middlewares'); // 작성한 사용자 정의 함수 deprecated를 가져온다
const { Domain, User, Post, Hashtag } = require('../models');
const router = express.Router();
//! 모든 라우터는 deprecated 처리
router.use(deprecated);
//! deprecated
//* 토큰 인증 테스트용
router.get('/test', verifyToken, (req, res) => {
... 코드
});
//! deprecated
// 내 포스팅을 제공해주는 api
router.get('/posts/my', verifyToken, (req, res) => {
... 코드
});
//! deprecated hashtag검색을 통해
// 포스트를 제공하는 api
router.get('/posts/hashtag/:title', verifyToken, async (req, res) => {
... 코드
});
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.