APIGit
2024-11-15
建立模擬 API 通常是軟體開發的重要組成部分,無論是用於測試還是快速原型設計。介紹 模擬伺服器,一個強大的工具,環繞 Express.js 提供一個簡化的環境來定義模擬伺服器行為,而無需手動設定和配置 Express 應用程式。
MockServer 本質上是在 Node.js 沙箱環境中運行的 Express.js 應用程式的包裝器。它可以幫助您透過簡單的定義快速建立模擬API並處理各種HTTP請求。這篇部落格文章將向您介紹 MockServer,解釋其功能,並透過一些範例展示如何輕鬆上手。
lodash
, moment
, faker
,以及更多預先安裝的內容,簡化了動態模擬響應的創建。MockServer 的工作原理是允許您使用定義 API 路由 mock
目的。這 mock
object 是一個全域實例,它包裝了 Express.js 應用程式並支援透過 mock.define()
功能。它提供了 Express.js 的靈活性,使創建和管理用於測試和開發的 API 變得簡單。
以下是 MockServer 如何簡化 API 建立的概述:
mock.define()
定義路由和請求處理程序。req
和 res
處理 HTTP 請求和回應。以下範例展示了使用 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 結構。
就像在 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,我們將快速評估並新增它。支援的庫包括:
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 支援以模組化的方式將模擬腳本拆分為多個文件,類似於日常開發實踐。通常,您會有一個 main.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);
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 都提供了模擬 API 行為所需的工具,而無需設定完整的 Express 伺服器的開銷。試試一下,讓您的 API 測試和原型設計更順利、更有效率。