Guía de migración de MockServer

APIGit

2024-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 sólida de definir comportamientos de servidor simulados. Sin embargo, la transición de la versión anterior (basada puramente en JavaScript) a la nueva requiere abordar algunas cuestiones.cambios de última hora.

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 tener en cuenta estos cambios y adaptar los 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 simuladoContinuar 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 aún utiliza 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, había varias bibliotecas populares de JavaScript disponibles globalmente, lo que permitía un 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 incluye una lista de bibliotecas compatibles y ejemplos de cómo usarlas:

  • @faker-js/faker(v9.2.0) - Generador de datos
  • adj.(v8.17.1) - Validación del esquema JSON
  • base64-js(v1.5.1) - Codificación/decodificación Base64
  • Corsés(v2.8.5) - Middleware de intercambio de recursos de origen cruzado
  • jsonwebtoken(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
  • Identificador único(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. Utilicemock.[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|...]().