Guida alla migrazione di MockServer

APIGit

2024-11-14

APIGIT MockServer Migration Guide

Introduzione

Il 9 novembre 2024, APIGIT ha lanciato ufficialmente una nuova versione del backend MockServer, basata suEsprimere.jse in esecuzione in un ambiente sandbox Node.js. Questa versione offre funzionalità migliorate, flessibilità migliorata e un modo più robusto per definire comportamenti di server fittizi. Tuttavia, la transizione dalla vecchia versione (basata puramente su JavaScript) a quella nuova richiede di affrontare alcunicambiamenti radicali.

Questa guida ti aiuterà a comprendere queste modifiche, ad adattare i tuoi progetti di server fittizi esistenti e ad assicurare una migrazione senza problemi al nuovo MockServer.

Modifiche principali e dettagli sulla migrazione

Il nuovo MockServer ha introdotto alcune modifiche radicali rispetto alla vecchia versione. È importante essere consapevoli di queste modifiche e adattare i progetti di conseguenza.

1. Modifica URL per server fittizi

Vecchio formato URL:your-mockserver.mock.apigit.com

Nuovo formato URL:your-mockserver.mockserver.apigit.com

Se hainon ripubblicatoil tuo server fittizio dal lancio del nuovo MockServer, il vecchio server fittizio saràcontinuare a lavorare fino alla fine dell'annoTuttavia, se decidi diripubblicareil tuo server fittizio utilizza lo stesso nome mockserver, dovrai aggiornare tutti i riferimenti esistenti per riflettere la nuova struttura URL.

Cosa devi fare:

  • Se il tuo server fittizio utilizza ancora il vecchio URL, non sono necessarie modifiche immediate e rimarrà operativo fino a31 dicembre 2024.
  • Se turipubblicaresul tuo server fittizio, assicurati che tutti gli endpoint, le configurazioni e i riferimenti nelle tue applicazioni siano aggiornati per utilizzare il nuovo URL del mockserver.

Esempio:

  • Vecchio URL:https://your-mockserver.mock.apigit.com/endpoint
  • Nuovo URL:https://your-mockserver.mockserver.apigit.com/endpoint

Assicuratevi di aggiornare tutti i riferimenti nelle applicazioni client, nella documentazione e nelle integrazioni.

2. Importazioni di librerie - Niente più variabili di librerie globali

Nel vecchio MockServer, diverse librerie JavaScript popolari erano disponibili a livello globale, consentendo l'uso diretto senza importazioni esplicite. Tra queste:

  • lodash (_)(v4.17.21) - Funzioni di utilità generale
  • momenti (moment)(v2.30.1) - Gestione di data e ora
  • impostore (faker)(v5.5.3) - Generatore di dati
  • avv (Ajv)(v6.10.0) - Validazione dello schema JSON
  • validatore (validator)(v13.12.0) - Aiuto per la convalida

Nella nuova versione di MockServer, queste librerie devono ora essereimportato manualmenteusandorequire O importistruzioni nei tuoi script fittizi prima dell'uso.

Cosa devi fare:

  • Aggiungere appropriatorequire O importistruzioni per tutte le librerie supportate utilizzate nei tuoi script fittizi.

Librerie supportate nel nuovo MockServer

Il nuovo MockServer è dotato di librerie JavaScript popolari preinstallate. Di seguito è riportato un elenco delle librerie supportate ed esempi di come utilizzarle:

  • @faker-js/faker(v9.2.0) - Generatore di dati
  • agg(v8.17.1) - Validazione dello schema JSON
  • base64-js(v1.5.1) - Codifica/decodifica Base64
  • corsa(v2.8.5) - Middleware di condivisione delle risorse tra origini
  • jsonwebtoken(v9.0.2) - Creazione e verifica JWT
  • lodash(v4.17.21) - Utilità generale
  • momento(v2.30.1) - Gestione di data e ora
  • UUID (codice univoco univoco)(v11.0.3) - Generatore UUID
  • validatore(v13.12.0) - Aiuto per la convalida

Esempio di utilizzo:

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.define("/testlibs", "GET", 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);
});