Guide de migration de MockServer

APIGit

2024-11-14

APIGIT MockServer Migration Guide

Introduction

Le 9 novembre 2024, APIGIT a officiellement lancé une nouvelle version du backend MockServer, propulsé parExpress.jset s'exécute dans un environnement sandbox Node.js. Cette version apporte des fonctionnalités améliorées, une flexibilité accrue et une manière plus robuste de définir les comportements des serveurs fictifs. Cependant, la transition de l'ancienne version (basée sur JavaScript pur) vers la nouvelle nécessite de traiter certainschangements de rupture.

Ce guide vous aidera à comprendre ces changements, à adapter vos projets de serveur fictif existants et à assurer une migration transparente vers le nouveau MockServer.

Modifications clés et détails de la migration

Le nouveau MockServer a introduit quelques changements majeurs par rapport à l'ancienne version. Il est important d'être conscient de ces changements et d'adapter vos projets en conséquence.

1. Changement d'URL pour les serveurs fictifs

Ancien format d'URL:your-mockserver.mock.apigit.com

Nouveau format d'URL:your-mockserver.mockserver.apigit.com

Si vous aveznon rééditévotre serveur fictif depuis le lancement du nouveau MockServer, l'ancien serveur fictif seracontinuer à travailler jusqu'à la fin de l'année. Cependant, si vous décidez derepubliervotre serveur fictif utilisant le même nom de serveur fictif, vous devrez mettre à jour toutes les références existantes pour refléter la nouvelle structure d'URL.

Ce que vous devez faire :

  • Si votre serveur fictif utilise toujours l'ancienne URL, aucune modification immédiate n'est requise et il restera opérationnel jusqu'à31 décembre 2024.
  • Si tu republiervotre serveur fictif, assurez-vous que tous les points de terminaison, configurations et références de vos applications sont mis à jour pour utiliser la nouvelle URL du serveur fictif.

Exemple:

  • Ancienne URL:https://your-mockserver.mock.apigit.com/endpoint
  • Nouvelle URL:https://your-mockserver.mockserver.apigit.com/endpoint

Assurez-vous de mettre à jour toutes les références dans vos applications clientes, votre documentation et vos intégrations.

2. Importations de bibliothèques - Plus de variables de bibliothèques globales

Dans l'ancien MockServer, plusieurs bibliothèques JavaScript populaires étaient disponibles dans le monde entier, permettant une utilisation directe sans importations explicites. Il s'agissait notamment de :

  • lodash (_)(v4.17.21) - Fonctions utilitaires générales
  • momentjs (moment)(v2.30.1) - Gestion de l'heure et de la date
  • faussaire (faker)(v5.5.3) - Générateur de données
  • ajv (Ajv)(v6.10.0) - Validation du schéma JSON
  • validateur (validator)(v13.12.0) - Aide à la validation

Dans la nouvelle version de MockServer, ces bibliothèques doivent désormais êtreimporté manuellement en utilisant require ou importinstructions dans vos scripts fictifs avant utilisation.

Ce que vous devez faire :

  • Ajouter appropriérequire ou importinstructions pour toutes les bibliothèques prises en charge utilisées dans vos scripts fictifs.

Bibliothèques prises en charge dans le nouveau MockServer

Le nouveau MockServer est livré avec des bibliothèques JavaScript populaires préinstallées. Vous trouverez ci-dessous une liste des bibliothèques prises en charge et des exemples de leur utilisation :

  • @faker-js/faker(v9.2.0) - Générateur de données
  • adj(v8.17.1) - Validation du schéma JSON
  • base64-js(v1.5.1) - Encodage/décodage Base64
  • cors(v2.8.5) - Middleware de partage de ressources inter-origines
  • jsonwebtoken(v9.0.2) - Création et vérification de JWT
  • lodash(v4.17.21) - Utilitaire général
  • moment(v2.30.1) - Gestion de l'heure et de la date
  • UUID(v11.0.3) - Générateur d'UUID
  • validateur(v13.12.0) - Aide à la validation

Exemple d'utilisation:

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()obsolète, utilisermock.[get|post|delete|...]() plutôt

**mock.define()est obsolète dans ce nouveau mockserver. Veuillez utilisermock.[get|post|delete|...]()au lieu de cela, qui est la manière native deexpress.jspour définir des itinéraires. Veuillez noter quemock.define()**est toujours disponible, mais le support cessera à l'avenir.

Ce que vous devez faire :

changer tout**mock.define()** à mock.[get|post|delete|...]().