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

APIGit

2024-11-15

APIGIT MockServer powered by expressjs and node

모의 API를 만드는 것은 테스트 또는 신속한 프로토타입 제작 여부와 관계없이 소프트웨어 개발의 필수적인 부분입니다. 소개모크서버, 주위를 감싸는 강력한 도구익스프레스.jsExpress 애플리케이션을 수동으로 설정 및 구성할 필요 없이 모의 서버 동작을 정의하기 위한 단순화된 환경을 제공합니다.

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객체.mock객체는 Express.js 앱을 래핑하고 다음을 통한 경로 정의를 지원하는 글로벌 인스턴스입니다.mock.define()**기능. Express.js의 유연성을 제공하여 테스트 및 개발 목적으로 API를 쉽게 만들고 관리할 수 있습니다.

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

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

예: 경로 및 미들웨어 정의

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

const { routeCallBackFunc } = require('./util.js');

// Define routes using mock.define(path, method, handler)
mock.define("/user/:name", "POST", function(req, res) {
  // Handle the request
  res.status(404).send("User not found");
});

mock.define("/user/:name", "DELETE", function(req, res) {
  res.status(200).send("User deleted successfully");
});

// Use request handlers from separate files
mock.define("/user/:name", "POST", routeCallBackFunc);

이 예제에서는 사용 방법을 보여줍니다.mock.define()POST 및 DELETE 경로를 만듭니다. 경로는 표준 Express.js 애플리케이션과 유사하게 정의되어 익숙한 API 구조를 보장합니다.

MockServer와 함께 미들웨어 사용

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

function mw1(req, res, next) {
  console.log("Middleware 1 executed");
  next();
}

function mw2(req, res, next) {
  console.log("Middleware 2 executed");
  next();
}

mock.use(mw1);
mock.use(mw2);

// Define middleware for a specific path
mock.use('/specific-path', (req, res, next) => {
  console.log('Middleware for /specific-path executed');
  next();
});

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

요청 및 응답 작업

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

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

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

mock.define('/search', 'GET', (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.define('/not-found', 'GET', (req, res) => {
  res.status(404).json({
    message: 'Resource not found',
    code: 404
  });
});

mock.define('/single-header', 'GET', (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.define('/test-libs', 'GET', (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.define('/users', 'POST', (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.define('/user/:name', 'POST', userPostHandler);
mock.define('/user/:name', 'DELETE', 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 테스트와 프로토타입 제작을 더욱 원활하고 생산적으로 만들어 보세요.