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ライブラリlodashmomentfakerなどがプリインストールされており、動的な模擬応答の作成が効率化されます。
  • ルートとミドルウェアをサポート: Express アプリケーションの場合と同じようにルートとミドルウェアを定義します。
  • ステートフルデータ: グローバル状態変数を使用してリクエスト間でデータを簡単に維持できるため、実際の動作をシミュレートするのに最適です。
  • モジュール型組織: モック サーバー スクリプトは、日常の開発手法と同様にモジュール形式で構成されているため、コードの管理と再利用が容易になります。

MockServerの仕組み

MockServerは、APIルートを定義することで機能します。mock 物体。 嘲笑するグローバルExpress.js アプリ基盤となる apigit モック サーバー フレームワークによって自動的に作成されます。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 にご連絡ください。すぐに評価して追加します。サポートされているライブラリは次のとおりです。

  • フェイカー(v9.2.0) - データジェネレーター
  • 形容詞(v8.17.1) - JSON スキーマ検証
  • ベース64(v1.5.1) - Base64 エンコード/デコード
  • コア(v2.8.5) - クロスオリジンリソース共有ミドルウェア
  • jsonウェブトークン(v9.0.2) - JWTの作成と検証
  • ロダッシュ(v4.17.21) - 一般的なユーティリティ
  • 一瞬(v2.30.1) - 時間と日付の処理
  • ユーザID(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: すべてのルートを定義し、ハンドラー定義のために他のファイルを必要とするメインファイル。ハンドラーモジュールは、読みやすさと整理のためにファイルの先頭に必要です。たとえば、ユーザーの追加や削除などのハンドラーを1つのファイルで定義し、次のようにして一緒にエクスポートできます。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 テストとプロトタイピングをよりスムーズかつ生産的にしてください。