APIGit
2024-11-15
모의 API를 만드는 것은 테스트 목적이든 신속한 프로토타입 제작이든 소프트웨어 개발의 중요한 측면입니다. APIGIT MockServer는 Express.js를 감싸는 간소화된 솔루션을 제공하여 Express 애플리케이션을 수동으로 설정하고 구성할 필요 없이 모의 서버 동작을 정의할 수 있는 간소화된 환경을 제공합니다.
APIGIT MockServer는 Node.js 샌드박스 내에서 작동하며, Express.js 앱을 활용하여 모의 API 생성을 간소화합니다. 간단한 정의를 통해 다양한 HTTP 요청을 빠르게 개발하고 처리할 수 있습니다. 이 소개에서는 MockServer의 기능을 살펴보고, 기능을 강조하며, 실제 예제를 통해 빠르게 시작하는 방법을 보여드리겠습니다.
lodash
,moment
,faker
등이 사전 설치되어 있어 동적 모의 응답 생성이 간소화됩니다.MockServer는 다음을 사용하여 API 경로를 정의할 수 있도록 합니다.mock
물체. 모조품글로벌입니다Express.js 앱기본 apigit mock 서버 프레임워크에 의해 자동으로 생성됩니다. Express.js 설명서에 제공된 가이드라인에 따라 mock.[method]를 사용하여 경로를 정의할 수 있습니다.
MockServer가 API 생성을 단순화하는 방법에 대한 개요는 다음과 같습니다.
mock.[method](...)
**경로와 요청 핸들러를 정의합니다.req
그리고 res
HTTP 요청과 응답을 처리합니다.다음 예제는 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
** 접근하다.
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에 문의하시면 신속하게 평가하여 추가해 드리겠습니다. 지원되는 라이브러리는 다음과 같습니다.
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는 일상적인 개발 관행과 유사하게 모듈 방식으로 모의 스크립트를 여러 파일로 분할하는 것을 지원합니다. 일반적으로main.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);
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 테스트와 프로토타입 제작을 더욱 원활하고 생산적으로 만들어 보세요.