APIGIT MockServer: un entorno de pruebas en la nube impulsado por Express.js y Node.js

APIGit

2024-11-15

APIGIT MockServer powered by expressjs and node

La creación de API simuladas suele ser una parte esencial del desarrollo de software, ya sea para pruebas o para la creación rápida de prototipos.Servidor simulado, una poderosa herramienta que envuelveExpress.jsProporcionar un entorno simplificado para definir el comportamiento del servidor simulado sin la necesidad de configurar manualmente una aplicación Express.

MockServer es básicamente un contenedor para una aplicación Express.js que se ejecuta en un entorno sandbox de Node.js. Te ayuda a crear rápidamente API simuladas y a gestionar varias solicitudes HTTP mediante definiciones simples. Esta publicación del blog te presentará MockServer, te explicará sus capacidades y te mostrará lo fácil que es comenzar con algunos ejemplos.

Características principales de MockServer

  • Envoltorio Express.js:MockServer se basa en Express.js, lo que lo hace familiar y fácil de usar para los desarrolladores que ya conocen Express.js.
  • Bibliotecas preinstaladas:Bibliotecas de JavaScript populares comolodash,moment,fakery más están preinstalados, lo que agiliza la creación de respuestas simuladas dinámicas.
  • Admite rutas y middleware:Defina rutas y middleware tal como lo haría en una aplicación Express.
  • Datos con estado:Mantenga fácilmente los datos entre solicitudes utilizando una variable de estado global, lo que lo hace perfecto para simular el comportamiento del mundo real.
  • Organización modular:Los scripts del servidor simulado están organizados modularmente, de manera similar a las prácticas de desarrollo diarias, lo que facilita la administración y reutilización del código.

Cómo funciona MockServer

MockServer funciona permitiéndole definir rutas API usando**mockobjeto. ElmockEl objeto es una instancia global que envuelve una aplicación Express.js y admite la definición de rutas a través de lamock.define()**Función. Proporciona la flexibilidad de Express.js, lo que simplifica la creación y la gestión de API para fines de prueba y desarrollo.

A continuación se muestra una descripción general de cómo MockServer simplifica la creación de API:

  • Usar mock.define()para definir rutas y manejadores de solicitudes.
  • Utilice métodos estándar de Express.js comoreq y respara gestionar solicitudes y respuestas HTTP.
  • Las bibliotecas preinstaladas eliminan la necesidad de instalación manual, lo que le permite concentrarse en definir su lógica simulada.

Ejemplo: Definición de rutas y middleware

El siguiente ejemplo muestra lo fácil que es crear rutas usando MockServer:

const { routeCallBackFunc } = require('./util.js');

// Define routes using mock.define(path, method, handler)
mock.define("/user/:name", "POST", function(req, res) {
  // Handle the request
  res.status(404).send("User not found");
});

mock.define("/user/:name", "DELETE", function(req, res) {
  res.status(200).send("User deleted successfully");
});

// Use request handlers from separate files
mock.define("/user/:name", "POST", routeCallBackFunc);

Este ejemplo demuestra cómo utilizarmock.define()para crear rutas POST y DELETE. Las rutas se definen de forma similar a las aplicaciones Express.js estándar, lo que garantiza una estructura API familiar.

Uso de middleware con MockServer

Al igual que en Express.js, puedes usar middleware para procesar solicitudes antes de que lleguen al controlador de ruta final:

function mw1(req, res, next) {
  console.log("Middleware 1 executed");
  next();
}

function mw2(req, res, next) {
  console.log("Middleware 2 executed");
  next();
}

mock.use(mw1);
mock.use(mw2);

// Define middleware for a specific path
mock.use('/specific-path', (req, res, next) => {
  console.log('Middleware for /specific-path executed');
  next();
});

El mock.use()La función se puede utilizar para definir middleware para todas las rutas o rutas específicas, como en una aplicación Express.

Trabajar con solicitudes y respuestas

MockServer ofrece una forma sencilla de interactuar con solicitudes y respuestas mediante las convenciones estándar de Express.js. A continuación, se muestran algunos ejemplos de tareas comunes:

Manejo de parámetros de ruta y parámetros de consulta

mock.define('/repository/:user/:repo', 'GET', (req, res) => {
  const { user, repo } = req.params;
  res.json({
    message: 'Repository Details',
    user: user,
    repo: repo
  });
});

mock.define('/search', 'GET', (req, res) => {
  const { keyword, page, limit } = req.query;
  res.json({
    message: 'Search Parameters Received',
    keyword: keyword || 'none',
    page: page ? parseInt(page, 10) : 1,
    limit: limit ? parseInt(limit, 10) : 10
  });
});

Configuración del estado de respuesta y los encabezados

mock.define('/not-found', 'GET', (req, res) => {
  res.status(404).json({
    message: 'Resource not found',
    code: 404
  });
});

mock.define('/single-header', 'GET', (req, res) => {
  res.set('Content-Type', 'application/json');
  res.set('X-Custom-Header', ['value1', 'value2']);
  res.json({ message: 'Headers set successfully!' });
});

Uso de bibliotecas preinstaladas

MockServer viene con bibliotecas JavaScript populares preinstaladas, por lo que puede usarlas directamente en sus definiciones simuladas:

const _ = require('lodash');
const moment = require('moment');
const { faker } = require('@faker-js/faker');

mock.define('/test-libs', 'GET', (req, res) => {
  const randomUser = {
    id: faker.datatype.uuid(),
    name: faker.name.findName(),
    email: faker.internet.email()
  };
  res.json({
    currentDate: moment().format(),
    activeUsers: _.filter([{ active: true }, { active: false }], { active: true }),
    randomUser: randomUser
  });
});

Estas bibliotecas le ayudan a crear respuestas dinámicas y completas fácilmente sin necesidad de instalaciones adicionales. Si necesita una biblioteca que no se encuentra en la lista, comuníquese con APIGIT y la evaluaremos y la agregaremos rápidamente. Las bibliotecas compatibles incluyen:

  • @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

Datos con estado con MockServer

MockServer proporciona unastateobjeto, que permite almacenar y recuperar datos entre solicitudes, lo que facilita la simulación del estado persistente:

// Create a stateful list of users
state.users = state.users || [];

mock.define('/users', 'POST', (req, res) => {
  if (!req.body.username) {
    return res.status(400).json({ status: "error", details: "Missing username" });
  }

  state.users.push(req.body);
  return res.status(200).json({ status: "ok" });
});

Scripts de simulación modulares con MockServer

Para mantener el código más limpio y organizado, MockServer permite dividir los scripts simulados en varios archivos de forma modular, de forma similar a las prácticas de desarrollo cotidianas. Normalmente, tendrías unmain.jsarchivo que define todas las rutas, que luego requiere definiciones de controladores de archivos separados. Esto le permite crear módulos reutilizables y bien estructurados para controladores de rutas, manteniendo su base de código mantenible.

Por ejemplo:

  • principal.js: El archivo principal que define todas las rutas y requiere otros archivos para las definiciones de controladores. Los módulos de controladores son necesarios al principio del archivo para una mejor legibilidad y organización. Por ejemplo, los controladores como agregar o eliminar usuarios se pueden definir en un archivo y exportar juntos usandomodule.exports.
// main.js

// Require handler modules at the top
const { userPostHandler, userDeleteHandler } = require('./handlers/userHandlers');

// Define routes
mock.define('/user/:name', 'POST', userPostHandler);
mock.define('/user/:name', 'DELETE', userDeleteHandler);
  • manejadores/userHandlers.js:Un archivo separado que exporta funciones para manejar diferentes solicitudes relacionadas con el usuario, utilizandomodule.exportspara exportarlos juntos.
// handlers/userHandlers.js

function userPostHandler(req, res) {
  res.status(404).send('User not found');
}

function userDeleteHandler(req, res) {
  res.status(200).send('User deleted successfully');
}

module.exports = {
  userPostHandler,
  userDeleteHandler
};

Este enfoque modular le ayuda a organizar las rutas de forma lógica y permite la reutilización en diferentes proyectos simulados.

Conclusión

MockServer simplifica el proceso de configuración de API simuladas aprovechando la potencia de Express.js en un entorno aislado. Con bibliotecas integradas, definiciones de rutas sencillas, compatibilidad con middleware y gestión de datos con estado, es una solución conveniente para los desarrolladores que buscan crear API simuladas de forma rápida y eficiente.

Tanto si eres un principiante como un desarrollador experimentado, MockServer te ofrece las herramientas que necesitas para simular el comportamiento de la API sin la sobrecarga que supone configurar un servidor Express completo. Pruébalo y haz que tus pruebas y prototipos de API sean más fluidos y productivos.