Guía de migración de MockServer

APIGit

2023-11-14

APIGIT MockServer Migration Guide

Introducción

El 9 de noviembre de 2024, APIGIT lanzó oficialmente una nueva versión del backend MockServer, impulsado porExpress.jsy se ejecuta en un entorno sandbox de Node.js. Esta versión ofrece funciones mejoradas, mayor flexibilidad y una forma más robusta de definir comportamientos de servidor simulados. Sin embargo, la transición de la versión anterior (basada exclusivamente en JavaScript) a la nueva requiere abordar algunos problemas.cambios importantes.

Esta guía le ayudará a comprender estos cambios, adaptar sus proyectos de servidor simulado existentes y garantizar una migración sin problemas al nuevo MockServer.

Cambios clave y detalles de la migración

El nuevo MockServer ha introducido algunos cambios importantes en comparación con la versión anterior. Es importante tenerlos en cuenta y adaptar sus proyectos en consecuencia.

1. Cambio de URL para servidores simulados

Formato de URL antiguo:your-mockserver.mock.apigit.com

Nuevo formato de URL:your-mockserver.mockserver.apigit.com

Si tienesno republicadosu servidor simulado desde el lanzamiento del nuevo MockServer, el antiguo servidor simuladoseguir trabajando hasta fin de año. Sin embargo, si decidesrepublicarSi su servidor simulado utiliza el mismo nombre de servidor simulado, deberá actualizar cualquier referencia existente para reflejar la nueva estructura de URL.

Lo que necesitas hacer:

  • Si su servidor simulado todavía usa la URL anterior, no se requieren cambios inmediatos y permanecerá operativo hasta que31 de diciembre de 2024.
  • Si usted republicarSu servidor simulado, asegúrese de que todos los puntos finales, configuraciones y referencias en sus aplicaciones estén actualizados para usar la nueva URL del servidor simulado.

Ejemplo:

  • URL antigua:https://your-mockserver.mock.apigit.com/endpoint
  • Nueva URL:https://your-mockserver.mockserver.apigit.com/endpoint

Asegúrese de actualizar todas las referencias en sus aplicaciones cliente, documentación e integraciones.

2. Importaciones de bibliotecas: no más variables de bibliotecas globales

En el antiguo MockServer, varias bibliotecas populares de JavaScript estaban disponibles globalmente, lo que permitía su uso directo sin importaciones explícitas. Entre ellas se encontraban:

  • lodash (_)(v4.17.21) - Funciones de utilidad general
  • momentojs (moment)(v2.30.1) - Manejo de fecha y hora
  • farsante**faker****)**(v5.5.3) - Generador de datos
  • ajv (Ajv)(v6.10.0) - Validación del esquema JSON
  • validador (validator)(v13.12.0) - Asistente de validación

En la nueva versión de MockServer, estas bibliotecas ahora deben serimportado manualmente usando require o importdeclaraciones en sus scripts simulados antes de usarlos.

Lo que necesitas hacer:

  • Añade lo apropiadorequire o importdeclaraciones para cualquier biblioteca compatible utilizada en sus scripts simulados.

Bibliotecas compatibles con el nuevo MockServer

El nuevo MockServer viene con bibliotecas JavaScript populares preinstaladas. A continuación, se muestra una lista de bibliotecas compatibles y ejemplos de cómo usarlas:

  • @faker-js/faker(v9.2.0) - Generador de datos
  • ajv(v8.17.1) - Validación del esquema JSON
  • base64-js(v1.5.1) - Codificación/decodificación Base64
  • coros(v2.8.5) - Middleware de intercambio de recursos entre orígenes
  • token web json(v9.0.2) - Creación y verificación de JWT
  • lodash(v4.17.21) - Utilidad general
  • momento(v2.30.1) - Manejo de fecha y hora
  • UUID(v11.0.3) - Generador de UUID
  • validador(v13.12.0) - Asistente de validación

Ejemplo de uso:

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()obsoleto, usomock.[get|post|delete|...]() en cambio

**mock.define()está obsoleto en este nuevo servidor simulado. Por favor, úselo.mock.[get|post|delete|...]()En cambio, que es la forma nativa deexpress.jsPara definir rutas. Tenga en cuenta quemock.define()**Todavía está disponible, pero dejará de brindar soporte en el futuro.

Lo que necesitas hacer:

cambiar todo**mock.define()** a mock.[get|post|delete|...]().