APIGIT MockServer - Express.js 및 Node.js로 구동되는 클라우드 샌드박스

APIGit

2024-11-15

APIGIT MockServer powered by expressjs and node

모의 API를 만드는 것은 테스트 목적이든 신속한 프로토타입 제작이든 소프트웨어 개발의 중요한 측면입니다. APIGIT MockServer는 Express.js를 감싸는 간소화된 솔루션을 제공하여 Express 애플리케이션을 수동으로 설정하고 구성할 필요 없이 모의 서버 동작을 정의할 수 있는 간소화된 환경을 제공합니다.

APIGIT MockServer는 Node.js 샌드박스 내에서 작동하며, Express.js 앱을 활용하여 모의 API 생성을 간소화합니다. 간단한 정의를 통해 다양한 HTTP 요청을 빠르게 개발하고 처리할 수 있습니다. 이 소개에서는 MockServer의 기능을 살펴보고, 기능을 강조하며, 실제 예제를 통해 빠르게 시작하는 방법을 보여드리겠습니다.

MockServer의 주요 기능

  • Express.js 래퍼: MockServer는 Express.js를 감싸고 있어 Express.js를 이미 알고 있는 개발자라도 익숙하고 쉽게 사용할 수 있습니다.
  • 사전 설치된 라이브러리: 다음과 같은 인기 있는 JavaScript 라이브러리lodash,moment,faker등이 사전 설치되어 있어 동적 모의 응답 생성이 간소화됩니다.
  • 경로 및 미들웨어 지원: Express 애플리케이션에서와 마찬가지로 경로와 미들웨어를 정의합니다.
  • 상태 저장 데이터: 글로벌 상태 변수를 사용하여 요청 간의 데이터를 쉽게 유지 관리하므로 실제 동작을 시뮬레이션하는 데 적합합니다.
  • 모듈식 조직: 모의 서버 스크립트는 일상적인 개발 관행과 유사하게 모듈 방식으로 구성되어 있어 코드를 쉽게 관리하고 재사용할 수 있습니다.

MockServer 작동 방식

MockServer는 다음을 사용하여 API 경로를 정의할 수 있도록 합니다.mock 물체. 모조품글로벌입니다Express.js 앱기본 apigit mock 서버 프레임워크에 의해 자동으로 생성됩니다. Express.js 설명서에 제공된 가이드라인에 따라 mock.[method]를 사용하여 경로를 정의할 수 있습니다.

MockServer가 API 생성을 단순화하는 방법에 대한 개요는 다음과 같습니다.

  • 사용 **mock.[method](...)**경로와 요청 핸들러를 정의합니다.
  • 다음과 같은 표준 Express.js 메서드를 사용하세요.req 그리고 resHTTP 요청과 응답을 처리합니다.
  • 사전 설치된 라이브러리를 사용하면 수동 설치가 필요 없으므로 모의 논리를 정의하는 데 집중할 수 있습니다.

예: 경로 및 미들웨어 정의

다음 예제는 MockServer를 사용하여 경로를 만드는 것이 얼마나 쉬운지 보여줍니다.

mock.get("/user/:name", function (req, res) {
 return res.status(200).send("hello" + req.params.name);
});

mock.post('/test-urlencoded', (req, res) => {
 console.log('Received x-www-form-urlencoded data:', req.body);
 res.status(200).send({ message: 'Received x-www-form-urlencoded data', data: req.body });
});

mock.get('/testauth', exampelAuthMiddleware, (req, res) => {
 res.status(200).send('This route is to deomostrate auth through middleware ');
});

mock.get('/testmd2', firstMiddleware,  secondMiddleware, (req, res) => {
 res.status(200).send('This route has multiple middlewares!');
});

// !!!== mock.define is deprecated and provided for compatibility only. Please use mock.[method] instead, as it follows the native Express.js approach. !!!
mock.delete("/user/:name", function(req, res) {
  // handle req
  res.status(200).send("success");
});

참고하시기 바랍니다**mock.define()더 이상 사용되지 않으며 호환성 목적으로만 제공됩니다. 사용을 권장합니다.mock.[method]대신, 그것은 원주민과 일치하기 때문에Express.js** 접근하다.

MockServer와 함께 미들웨어 사용

Express.js와 마찬가지로 미들웨어를 사용하면 요청이 최종 경로 핸들러에 도달하기 전에 요청을 처리할 수 있습니다.

const exampelAuthMiddleware = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  if (!authHeader) {
    return res.status(401).send('Authorization header missing');
  }

  const token = authHeader.split(' ')[1];
  if (!token) {
    return res.status(401).send('Token missing');
  }

  try {
    const SECRET_KEY = 'your-secret-key';
    const decoded = jwt.verify(token, SECRET_KEY);
    req.user = decoded;
    next();
  } catch (err) {
    return res.status(403).send('Invalid token');
  }
};

function firstMiddleware(req, res, next) {
  console.log('First middleware');
  next();
}

function secondMiddleware(req, res, next) {
  console.log('Second middleware');
  next();
}

mock.use((req, res, next) => {
  console.log("middware for all routes");
  next();
});

mock.get('/testauth', exampelAuthMiddleware, (req, res) => {
  res.status(200).send('This route is to deomostrate auth through middleware ');
});

mock.get('/testmd2', firstMiddleware,  secondMiddleware, (req, res) => {
  res.status(200).send('This route has multiple middlewares!');
});
   

mock.use()이 함수는 Express 앱처럼 모든 경로나 특정 경로에 대한 미들웨어를 정의하는 데 사용할 수 있습니다.

요청 및 응답 작업

MockServer는 표준 Express.js 규칙을 사용하여 요청 및 응답과 상호 작용하는 간단한 방법을 제공합니다. 다음은 일반적인 작업의 몇 가지 예입니다.

경로 매개변수 및 쿼리 매개변수 처리

mock.get('/repository/:user/:repo', (req, res) => {
  const { user, repo } = req.params;
  res.json({
    message: 'Repository Details',
    user: user,
    repo: repo
  });
});

mock.get('/search', (req, res) => {
  const { keyword, page, limit } = req.query;
  res.json({
    message: 'Search Parameters Received',
    keyword: keyword || 'none',
    page: page ? parseInt(page, 10) : 1,
    limit: limit ? parseInt(limit, 10) : 10
  });
});

응답 상태 및 헤더 설정

mock.get('/not-found', (req, res) => {
  res.status(404).json({
    message: 'Resource not found',
    code: 404
  });
});

mock.get('/single-header', (req, res) => {
  res.set('Content-Type', 'application/json');
  res.set('X-Custom-Header', ['value1', 'value2']);
  res.json({ message: 'Headers set successfully!' });
});

사전 설치된 라이브러리 사용

MockServer에는 인기 있는 JavaScript 라이브러리가 미리 설치되어 있으므로 모의 정의에서 직접 사용할 수 있습니다.

const _ = require('lodash');
const moment = require('moment');
const { faker } = require('@faker-js/faker');

mock.get('/test-libs', (req, res) => {
  const randomUser = {
    id: faker.datatype.uuid(),
    name: faker.name.findName(),
    email: faker.internet.email()
  };
  res.json({
    currentDate: moment().format(),
    activeUsers: _.filter([{ active: true }, { active: false }], { active: true }),
    randomUser: randomUser
  });
});

이러한 라이브러리는 추가 설치 없이도 풍부하고 동적인 응답을 쉽게 만드는 데 도움이 됩니다. 나열되지 않은 라이브러리가 필요한 경우 APIGIT에 문의하시면 신속하게 평가하여 추가해 드리겠습니다. 지원되는 라이브러리는 다음과 같습니다.

  • @faker-js/페이커(v9.2.0) - 데이터 생성기
  • 조정(v8.17.1) - JSON 스키마 검증
  • 베이스64-js(v1.5.1) - Base64 인코딩/디코딩
  • 코스(v2.8.5) - Cross-Origin Resource Sharing 미들웨어
  • jsonwebtoken(v9.0.2) - JWT 생성 및 검증
  • 로다시(v4.17.21) - 일반 유틸리티
  • 순간(v2.30.1) - 시간 및 날짜 처리
  • 유아이디(v11.0.3) - UUID 생성기
  • 검증기(v13.12.0) - 검증 도우미

MockServer를 사용한 상태 저장 데이터

MockServer는 다음을 제공합니다.state요청 간에 데이터를 저장하고 검색할 수 있게 해주는 객체로, 지속적인 상태를 쉽게 시뮬레이션할 수 있습니다.

// Create a stateful list of users
state.users = state.users || [];

mock.post('/users', (req, res) => {
  if (!req.body.username) {
    return res.status(400).json({ status: "error", details: "Missing username" });
  }

  state.users.push(req.body);
  return res.status(200).json({ status: "ok" });
});

MockServer를 사용한 모듈식 모의 스크립트

더 깔끔하고 체계적인 코드를 유지하기 위해 MockServer는 일상적인 개발 관행과 유사하게 모듈 방식으로 모의 스크립트를 여러 파일로 분할하는 것을 지원합니다. 일반적으로main.js모든 경로를 정의하는 파일로, 이후 별도의 파일에서 핸들러 정의가 필요합니다. 이를 통해 경로 핸들러에 대한 재사용 가능하고 잘 구성된 모듈을 만들어 코드베이스를 유지 관리할 수 있습니다.

예를 들어:

  • 메인.js: 모든 경로를 정의하고 핸들러 정의를 위해 다른 파일을 필요로 하는 주 파일입니다. 핸들러 모듈은 더 나은 가독성과 구성을 위해 파일의 시작 부분에 필요합니다. 예를 들어, 사용자 추가 또는 삭제와 같은 핸들러는 하나의 파일에 정의하고 다음을 사용하여 함께 내보낼 수 있습니다.module.exports.
// main.js

// Require handler modules at the top
const { userPostHandler, userDeleteHandler } = require('./handlers/userHandlers');

// Define routes
mock.post('/user/:name', userPostHandler);
mock.delete('/user/:name', userDeleteHandler);
  • 핸들러/userHandlers.js: 다양한 사용자 관련 요청을 처리하기 위한 기능을 내보내는 별도의 파일module.exports함께 내보내는 거죠.
// handlers/userHandlers.js

function userPostHandler(req, res) {
  res.status(404).send('User not found');
}

function userDeleteHandler(req, res) {
  res.status(200).send('User deleted successfully');
}

module.exports = {
  userPostHandler,
  userDeleteHandler
};

이러한 모듈식 접근 방식은 경로를 논리적으로 구성하는 데 도움이 되며 다양한 모의 프로젝트에서 재사용이 가능합니다.

결론

MockServer는 샌드박스 환경에서 Express.js의 힘을 활용하여 모의 API를 설정하는 과정을 간소화합니다. 내장 라이브러리, 쉬운 경로 정의, 미들웨어 지원 및 상태 저장 데이터 관리 기능을 갖추고 있어 빠르고 효율적으로 모의 API를 만들고자 하는 개발자에게 편리한 솔루션입니다.

초보자이든 숙련된 개발자이든 MockServer는 전체 Express 서버를 설정하는 오버헤드 없이 API 동작을 시뮬레이션하는 데 필요한 도구를 제공합니다. 시도해 보고 API 테스트와 프로토타입 제작을 더욱 원활하고 생산적으로 만들어 보세요.