MockServer 移行ガイド

APIGit

2024-11-14

APIGIT MockServer Migration Guide

導入

2024年11月9日、APIGITはMockServerバックエンドの新バージョンを正式にリリースしました。エクスプレスNode.jsサンドボックス環境で実行できます。このバージョンでは、機能が向上し、柔軟性が高まり、モックサーバーの動作をより堅牢に定義できるようになりました。ただし、古いバージョン(純粋なJavaScriptベース)から新しいバージョンに移行するには、いくつかの問題に対処する必要があります。重大な変更

このガイドは、これらの変更を理解し、既存のモック サーバー プロジェクトを適応させ、新しい MockServer へのシームレスな移行を確実に行うのに役立ちます。

主な変更点と移行の詳細

新しい MockServer では、古いバージョンと比較していくつかの重大な変更が導入されています。これらの変更を認識し、それに応じてプロジェクトを調整することが重要です。

1. 模擬サーバーのURL変更

古い URL 形式:your-mockserver.mock.apigit.com

新しい URL 形式:your-mockserver.mockserver.apigit.com

もしあなたが再公開されません新しいMockServerの起動以降、古いモックサーバーは年末まで仕事を続けるただし、再出版する同じ mockserver 名を使用するモック サーバーの場合は、新しい URL 構造を反映するように既存の参照を更新する必要があります。

必要なこと:

  • モックサーバーがまだ古いURLを使用している場合は、すぐに変更する必要はなく、次の期間まで運用を継続します。2024年12月31日
  • もしあなたが再出版するモック サーバーで、アプリケーション内のすべてのエンドポイント、構成、参照がモック サーバーの新しい URL を使用するように更新されていることを確認します。

:

  • 古いURL:https://your-mockserver.mock.apigit.com/endpoint
  • 新しいURL:https://your-mockserver.mockserver.apigit.com/endpoint

クライアント アプリケーション、ドキュメント、統合内の参照を必ず更新してください。

2. ライブラリのインポート - グローバルライブラリ変数は不要

以前の MockServer では、いくつかの一般的な JavaScript ライブラリがグローバルに利用可能で、明示的なインポートなしで直接使用できました。これには次のものが含まれます。

  • ロダッシュ (_(v4.17.21) - 一般的なユーティリティ関数
  • momentjs (moment(v2.30.1) - 時間と日付の処理
  • 偽者(faker(v5.5.3) - データジェネレーター
  • アージュヴ(Ajv(v6.10.0) - JSON スキーマ検証
  • バリデータ(validator(v13.12.0) - 検証ヘルパー

MockServerの新しいバージョンでは、これらのライブラリは手動でインポート使用してrequire または import使用する前に、モック スクリプトにステートメントを追加します。

必要なこと:

  • 適切なものを追加require または importモック スクリプトで使用されるサポートされているライブラリのステートメント。

新しい MockServer でサポートされるライブラリ

新しい MockServer には、一般的な JavaScript ライブラリがプリインストールされています。以下は、サポートされているライブラリのリストと、その使用例です。

  • フェイカー(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) - 検証ヘルパー

使用例:

var moment = require('moment'); // require
const { faker } = require('@faker-js/faker');
const Ajv = require("ajv");
var validator = require('validator');
const base64 = require('base64-js');
const jwt = require('jsonwebtoken');
const { v4: uuidv4 } = require('uuid');
const _ = require('lodash');

function testLodash() {
  // Test data
  const users = [
    { id: 1, name: 'Alice', age: 25, active: true },
    { id: 2, name: 'Bob', age: 30, active: false },
    { id: 3, name: 'Charlie', age: 35, active: true },
    { id: 4, name: 'David', age: 40, active: false }
  ];

  // Example 1: Filter active users
  const activeUsers = _.filter(users, { active: true });
  console.log('Active Users:', activeUsers);

  // Example 2: Sort users by age in descending order
  const sortedByAge = _.orderBy(users, ['age'], ['desc']);
  console.log('Users sorted by age (desc):', sortedByAge);

  // Example 3: Get the names of all users
  const userNames = _.map(users, 'name');
  console.log('User Names:', userNames);
}

function testMoment() {
  console.log("Current time is:", moment().format());
}

function testUuidv4() {
  console.log("UUID is:", uuidv4());
}

function testAjv() {
  const ajv = new Ajv();
  const schema = {
    type: "object",
    properties: {
      foo: { type: "integer" },
      bar: { type: "string" },
    },
    required: ["foo"],
    additionalProperties: false,
  };
  const data = { foo: 1, bar: "abc" };
  const validate = ajv.compile(schema);
  const valid = validate(data);
  if (!valid) console.log(validate.errors);
}

function testBase64() {
  const text = 'Hello, world!';
  const textBytes = new TextEncoder().encode(text);
  const base64Encoded = base64.fromByteArray(textBytes);
  console.log('Base64 Encoded:', base64Encoded);

  const decodedBytes = base64.toByteArray(base64Encoded);
  const decodedText = new TextDecoder().decode(decodedBytes);
  console.log('Decoded Text:', decodedText);
}

function testValidator() {
  const result = validator.isEmail('fooo~bar.com');
  console.log("fooo~bar.com is email, right?", result);
}

function testFakerJS() {
  return {
    userId: faker.string.uuid(),
    username: faker.internet.username(),
    email: faker.internet.email(),
    avatar: faker.image.avatar(),
    password: faker.internet.password(),
    birthdate: faker.date.birthdate(),
    registeredAt: faker.date.past(),
  };
}

function testJwt() {
  const SECRET_KEY = 'your-secret-key';
  const payload = { userId: 123, username: 'testUser' };
  const token = jwt.sign(payload, SECRET_KEY, { expiresIn: '1h' });
  console.log('Generated Token:', token);
  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    console.log('Decoded Payload:', decoded);
  } catch (err) {
    console.error('Token verification failed:', err.message);
  }
}

mock.get("/testlibs", function (req, res) {
  console.log("==== this is a test of libs supported =====");
  testLodash();
  testMoment();
  testUuidv4();
  testAjv();
  testValidator();
  testBase64();
  testJwt();
  const jsonData = testFakerJS();
  return res.status(200).json(jsonData);
});

3.mock.define()非推奨、使用mock.[get|post|delete|...]() その代わり

**mock.define()この新しいモックサーバーでは非推奨です。mock.[get|post|delete|...]()代わりに、それはexpress.jsルートを定義するために。mock.define()**まだ利用可能ですが、将来的にはサポートが停止されます。

必要なこと:

すべて変更**mock.define()** に mock.[get|post|delete|...]()