MockServer-Migrationshandbuch

APIGit

2023-11-14

APIGIT MockServer Migration Guide

Einführung

Am 9. November 2024 hat APIGIT offiziell eine neue Version des MockServer-Backends veröffentlicht, unterstützt vonExpress.jsund läuft in einer Node.js-Sandbox-Umgebung. Diese Version bietet verbesserte Funktionen, mehr Flexibilität und eine robustere Möglichkeit, Mock-Server-Verhalten zu definieren. Der Übergang von der alten Version (rein JavaScript-basiert) zur neuen erfordert jedoch einigeWichtige Änderungen.

Dieses Handbuch hilft Ihnen, diese Änderungen zu verstehen, Ihre vorhandenen Mock-Server-Projekte anzupassen und eine nahtlose Migration zum neuen MockServer sicherzustellen.

Wichtige Änderungen und Migrationsdetails

Der neue MockServer bringt im Vergleich zur alten Version einige wichtige Änderungen mit sich. Es ist wichtig, sich dieser Änderungen bewusst zu sein und Ihre Projekte entsprechend anzupassen.

1. URL-Änderung für Mock-Server

Altes URL-Format:your-mockserver.mock.apigit.com

Neues URL-Format:your-mockserver.mockserver.apigit.com

Wenn Sienicht erneut veröffentlichtIhr Mock-Server seit dem Start des neuen MockServers, der alte Mock-Server wirdbis zum Jahresende weiterarbeitenWenn Sie sich jedoch dazu entschließen,erneut veröffentlichenWenn Ihr Mock-Server denselben Mockserver-Namen verwendet, müssen Sie alle vorhandenen Referenzen aktualisieren, um die neue URL-Struktur widerzuspiegeln.

Was Sie tun müssen:

  • Wenn Ihr Mock-Server noch die alte URL verwendet, sind keine sofortigen Änderungen erforderlich, und er bleibt betriebsbereit, bis31. Dezember 2024.
  • Wenn du erneut veröffentlichenStellen Sie bei der Installation Ihres Mock-Servers sicher, dass alle Endpunkte, Konfigurationen und Referenzen in Ihren Anwendungen aktualisiert werden, um die neue URL des Mock-Servers zu verwenden.

Beispiel:

  • Alte URL:https://your-mockserver.mock.apigit.com/endpoint
  • Neue URL:https://your-mockserver.mockserver.apigit.com/endpoint

Aktualisieren Sie unbedingt alle Referenzen in Ihren Clientanwendungen, Dokumentationen und Integrationen.

2. Bibliotheksimporte – Keine globalen Bibliotheksvariablen mehr

Im alten MockServer waren mehrere beliebte JavaScript-Bibliotheken global verfügbar und ermöglichten die direkte Nutzung ohne explizite Importe. Dazu gehörten:

  • lodash (_)(v4.17.21) - Allgemeine Hilfsfunktionen
  • momentjs (moment)(v2.30.1) - Zeit- und Datumsverarbeitung
  • Fälscher (faker)(v5.5.3) - Datengenerator
  • ajv (Ajv)(v6.10.0) - JSON-Schemavalidierung
  • Validator (validator)(v13.12.0) - Validierungshilfe

In der neuen Version von MockServer müssen diese Bibliotheken nunmanuell importiertmitrequire oder importAnweisungen in Ihren Mock-Skripten vor der Verwendung.

Was Sie tun müssen:

  • Fügen Sie entsprechenderequire oder importAnweisungen für alle unterstützten Bibliotheken, die in Ihren Mock-Skripten verwendet werden.

Unterstützte Bibliotheken im neuen MockServer

Der neue MockServer ist mit gängigen JavaScript-Bibliotheken vorinstalliert. Nachfolgend finden Sie eine Liste der unterstützten Bibliotheken und Beispiele für deren Verwendung:

  • @faker-js/faker(v9.2.0) - Datengenerator
  • ajv(v8.17.1) - JSON-Schemavalidierung
  • base64-js(v1.5.1) – Base64-Kodierung/Dekodierung
  • Kors(v2.8.5) – Cross-Origin Resource Sharing-Middleware
  • jsonwebtoken(v9.0.2) – JWT-Erstellung und -Verifizierung
  • lodash(v4.17.21) – Allgemeines Dienstprogramm
  • Moment(v2.30.1) - Zeit- und Datumsverarbeitung
  • UUID(v11.0.3) - UUID-Generator
  • Prüfer(v13.12.0) - Validierungshilfe

Beispielverwendung:

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()veraltet, verwendenmock.[get|post|delete|...]() stattdessen

**mock.define()ist in diesem neuen Mockserver veraltet. Bitte verwenden Siemock.[get|post|delete|...]()stattdessen, was die native Art ist,express.jszur Definition von Routen. Bitte beachten Sie, dassmock.define()**ist noch verfügbar, der Support wird jedoch in Zukunft eingestellt.

Was Sie tun müssen:

alles ändern**mock.define()** Zu mock.[get|post|delete|...]().