APIGIT MockServer - un sandbox cloud basato su Express.js e Node.js

APIGit

2024-11-15

APIGIT MockServer powered by expressjs and node

La creazione di API fittizie è spesso una parte essenziale dello sviluppo software, sia per i test che per la prototipazione rapida. IntroduzioneServer fittizio, uno strumento potente che avvolgeEsprimere.jsper fornire un ambiente semplificato per definire il comportamento del server fittizio senza la necessità di impostare e configurare manualmente un'applicazione Express.

MockServer è essenzialmente un wrapper per un'app Express.js in esecuzione in un ambiente sandbox Node.js. Ti aiuta a creare rapidamente API fittizie e a gestire varie richieste HTTP utilizzando semplici definizioni. Questo post del blog ti introdurrà a MockServer, ne spiegherà le capacità e mostrerà quanto sia facile iniziare con alcuni esempi.

Caratteristiche principali di MockServer

  • Wrapper Express.js: MockServer racchiude Express.js, rendendolo familiare e facile da usare per gli sviluppatori che già conoscono Express.js.
  • Librerie preinstallate: Librerie JavaScript popolari comelodash,moment,fakere altri ancora sono preinstallati, semplificando la creazione di risposte simulate dinamiche.
  • Supporta percorsi e middleware: Definisci percorsi e middleware proprio come faresti in un'applicazione Express.
  • Dati con stato: Gestisci facilmente i dati tra le richieste utilizzando una variabile di stato globale, rendendolo perfetto per simulare comportamenti nel mondo reale.
  • Organizzazione modulare: Gli script del server fittizio sono organizzati in modo modulare, in modo simile alle pratiche di sviluppo quotidiane, semplificando la gestione e il riutilizzo del codice.

Come funziona MockServer

MockServer funziona consentendoti di definire percorsi API utilizzando**mockoggetto. Ilmockobject è un'istanza globale che racchiude un'app Express.js e supporta la definizione di percorsi attraversomock.define()**funzione. Offre la flessibilità di Express.js, semplificando la creazione e la gestione di API per scopi di test e sviluppo.

Ecco una panoramica di come MockServer semplifica la creazione di API:

  • Utilizzo mock.define()per definire percorsi e gestori delle richieste.
  • Utilizzare metodi Express.js standard comereq E resper gestire le richieste e le risposte HTTP.
  • Le librerie preinstallate eliminano la necessità di un'installazione manuale, consentendoti di concentrarti sulla definizione della logica simulata.

Esempio: Definizione di percorsi e middleware

L'esempio seguente mostra quanto sia semplice creare percorsi utilizzando 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);

Questo esempio dimostra come utilizzaremock.define()per creare percorsi POST e DELETE. I percorsi sono definiti in modo simile alle applicazioni Express.js standard, garantendo una struttura API familiare.

Utilizzo di Middleware con MockServer

Proprio come in Express.js, puoi utilizzare il middleware per elaborare le richieste prima che raggiungano il gestore del percorso finale:

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();
});

IL mock.use()La funzione può essere utilizzata per definire il middleware per tutti i percorsi o percorsi specifici, proprio come in un'app Express.

Lavorare con richieste e risposte

MockServer fornisce un modo semplice per interagire con richieste e risposte utilizzando le convenzioni standard di Express.js. Di seguito sono riportati alcuni esempi di attività comuni:

Gestione dei parametri di percorso e dei parametri di query

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
  });
});

Impostazione dello stato di risposta e delle intestazioni

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!' });
});

Utilizzo delle librerie preinstallate

MockServer è dotato di librerie JavaScript preinstallate, così puoi utilizzarle direttamente nelle tue definizioni fittizie:

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
  });
});

Queste librerie ti aiutano a creare facilmente risposte ricche e dinamiche senza la necessità di installazioni aggiuntive. Se hai bisogno di una libreria non elencata, contatta APIGIT e la valuteremo e la aggiungeremo rapidamente. Le librerie supportate includono:

  • @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 data e ora
  • UUID (codice univoco univoco)(v11.0.3) - Generatore UUID
  • validatore(v13.12.0) - assistente di convalida

Dati con stato con MockServer

MockServer fornisce unstateoggetto, che consente di memorizzare e recuperare dati tra le richieste, semplificando la simulazione dello stato 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" });
});

Script fittizi modulari con MockServer

Per mantenere un codice più pulito e organizzato, MockServer supporta la suddivisione degli script fittizi in più file in modo modulare, simile alle pratiche di sviluppo quotidiane. In genere, avresti unmain.jsfile che definisce tutte le route, che poi richiede definizioni di handler da file separati. Questo ti consente di creare moduli riutilizzabili e ben strutturati per i route handler, mantenendo la tua base di codice gestibile.

Per esempio:

  • principale.js: Il file principale che definisce tutti i percorsi e richiede altri file per le definizioni del gestore. I moduli del gestore sono richiesti all'inizio del file per una migliore leggibilità e organizzazione. Ad esempio, gestori come l'aggiunta o l'eliminazione di utenti possono essere definiti in un file ed esportati insieme utilizzandomodule.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);
  • gestori/userHandlers.js: Un file separato che esporta funzioni per gestire diverse richieste relative all'utente, utilizzandomodule.exportsper esportarli insieme.
// 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
};

Questo approccio modulare aiuta a organizzare i percorsi in modo logico e consente la riutilizzabilità in diversi progetti simulati.

Conclusione

MockServer semplifica il processo di impostazione di API fittizie sfruttando la potenza di Express.js in un ambiente sandbox. Con librerie integrate, definizioni di route semplici, supporto middleware e gestione dei dati con stato, è una soluzione comoda per gli sviluppatori che desiderano creare API fittizie in modo rapido ed efficiente.

Che tu sia un principiante o uno sviluppatore esperto, MockServer fornisce gli strumenti di cui hai bisogno per simulare il comportamento delle API senza il sovraccarico di dover configurare un server Express completo. Provalo e rendi i tuoi test e prototipi API più fluidi e produttivi.