APIGIT MockServer – eine Cloud-Sandbox auf Basis von Express.js und Node.js

APIGit

2024-11-15

APIGIT MockServer powered by expressjs and node

Das Erstellen von Mock-APIs ist oft ein wesentlicher Bestandteil der Softwareentwicklung, sei es zum Testen oder für Rapid Prototyping. EinführungMockServer, ein leistungsstarkes Tool, das sich umExpress.jsum eine vereinfachte Umgebung zum Definieren des simulierten Serververhaltens bereitzustellen, ohne dass eine Express-Anwendung manuell eingerichtet und konfiguriert werden muss.

MockServer ist im Wesentlichen ein Wrapper für eine Express.js-App, die in einer Node.js-Sandbox-Umgebung ausgeführt wird. Mithilfe einfacher Definitionen können Sie damit schnell Mock-APIs erstellen und verschiedene HTTP-Anfragen verarbeiten. Dieser Blogbeitrag stellt Ihnen MockServer vor, erklärt seine Funktionen und zeigt anhand einiger Beispiele, wie einfach der Einstieg ist.

Hauptfunktionen von MockServer

  • Express.js-Wrapper: MockServer umschließt Express.js und macht es für Entwickler, die Express.js bereits kennen, vertraut und einfach zu verwenden.
  • Vorinstallierte Bibliotheken: Beliebte JavaScript-Bibliotheken wielodash,moment,fakerund mehr sind vorinstalliert, wodurch die Erstellung dynamischer simulierter Antworten vereinfacht wird.
  • Unterstützt Routen und Middleware: Definieren Sie Routen und Middleware genau wie in einer Express-Anwendung.
  • Statusbehaftete Daten: Einfache Verwaltung von Daten zwischen Anfragen mithilfe einer globalen Statusvariable. Ideal für die Simulation realen Verhaltens.
  • Modulare Organisation: Mock-Server-Skripte sind modular organisiert, ähnlich wie tägliche Entwicklungspraktiken, wodurch die Verwaltung und Wiederverwendung von Code einfach wird.

So funktioniert MockServer

MockServer funktioniert, indem Sie API-Routen definieren können mit**mockObjekt. DasmockObjekt ist eine globale Instanz, die eine Express.js-App umschließt und das Definieren von Routen durch diemock.define()**Funktion. Es bietet die Flexibilität von Express.js und vereinfacht das Erstellen und Verwalten von APIs für Test- und Entwicklungszwecke.

Hier ist eine Übersicht, wie MockServer das Erstellen von APIs vereinfacht:

  • Verwenden mock.define()um Routen und Anforderungshandler zu definieren.
  • Verwenden Sie Standardmethoden von Express.js wiereq Und resum HTTP-Anfragen und -Antworten zu verarbeiten.
  • Vorinstallierte Bibliotheken machen eine manuelle Installation überflüssig, sodass Sie sich auf die Definition Ihrer Mock-Logik konzentrieren können.

Beispiel: Definieren von Routen und Middleware

Das folgende Beispiel zeigt, wie einfach es ist, Routen mit MockServer zu erstellen:

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

Dieses Beispiel zeigt die Verwendung vonmock.define()um POST- und DELETE-Routen zu erstellen. Die Routen werden ähnlich wie bei Standard-Express.js-Anwendungen definiert, wodurch eine vertraute API-Struktur gewährleistet wird.

Verwenden von Middleware mit MockServer

Genau wie in Express.js können Sie Middleware verwenden, um Anfragen zu verarbeiten, bevor sie den endgültigen Routenhandler erreichen:

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

Der mock.use()Mit der Funktion kann Middleware für alle Routen oder bestimmte Pfade definiert werden, genau wie in einer Express-App.

Arbeiten mit Anfragen und Antworten

MockServer bietet eine einfache Möglichkeit, mit Anfragen und Antworten unter Verwendung standardmäßiger Express.js-Konventionen zu interagieren. Nachfolgend finden Sie einige Beispiele für gängige Aufgaben:

Umgang mit Routenparametern und Abfrageparametern

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

Festlegen des Antwortstatus und der Header

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

Vorinstallierte Bibliotheken verwenden

MockServer wird mit vorinstallierten beliebten JavaScript-Bibliotheken geliefert, sodass Sie diese direkt in Ihren Mock-Definitionen verwenden können:

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

Mit diesen Bibliotheken können Sie problemlos umfangreiche, dynamische Antworten erstellen, ohne dass zusätzliche Installationen erforderlich sind. Wenn Sie eine Bibliothek benötigen, die nicht aufgeführt ist, wenden Sie sich bitte an APIGIT. Wir werden sie prüfen und schnell hinzufügen. Zu den unterstützten Bibliotheken gehören:

  • @faker-js/faker(v9.2.0) - Datengenerator
  • adj(v8.17.1) - JSON-Schemavalidierung
  • base64-js(v1.5.1) – Base64-Kodierung/Dekodierung
  • Korsett(v2.8.5) - Cross-Origin-Ressourcenfreigabe-Middleware
  • jsonwebtoken(v9.0.2) - JWT-Erstellung und -Verifizierung
  • lodash(v4.17.21) – allgemeines Dienstprogramm
  • Moment(v2.30.1) - Zeit- und Datumsbehandlung
  • UUID(v11.0.3) - UUID-Generator
  • Prüfer(v13.12.0) - Validierungshilfe

Stateful Data mit MockServer

MockServer bietet einestate-Objekt, mit dem Sie Daten zwischen Anforderungen speichern und abrufen können. Dadurch wird die Simulation eines dauerhaften Zustands vereinfacht:

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

Modulare Mock-Skripte mit MockServer

Um saubereren und besser organisierten Code zu erhalten, unterstützt MockServer das modulare Aufteilen von Mock-Skripten in mehrere Dateien, ähnlich wie bei alltäglichen Entwicklungspraktiken. Normalerweise haben Sie einemain.jsDatei, die alle Routen definiert, was dann Handlerdefinitionen aus separaten Dateien erfordert. Auf diese Weise können Sie wiederverwendbare, gut strukturierte Module für Routenhandler erstellen und so Ihre Codebasis wartbar halten.

Zum Beispiel:

  • Haupt-JS: Die Hauptdatei, die alle Routen definiert und andere Dateien für die Handlerdefinitionen benötigt. Die Handlermodule werden am Anfang der Datei benötigt, um die Lesbarkeit und Organisation zu verbessern. Beispielsweise können Handler wie das Hinzufügen oder Löschen von Benutzern in einer Datei definiert und gemeinsam exportiert werden mitmodule.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);
  • handlers/userHandlers.js: Eine separate Datei, die Funktionen zum Verarbeiten verschiedener benutzerbezogener Anfragen exportiert.module.exportsum sie zusammen zu exportieren.
// 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
};

Dieser modulare Ansatz hilft Ihnen, Routen logisch zu organisieren und ermöglicht die Wiederverwendbarkeit in verschiedenen Mock-Projekten.

Abschluss

MockServer vereinfacht das Einrichten von Mock-APIs, indem es die Leistung von Express.js in einer Sandbox-Umgebung nutzt. Mit integrierten Bibliotheken, einfachen Routendefinitionen, Middleware-Unterstützung und statusabhängiger Datenverwaltung ist es eine praktische Lösung für Entwickler, die schnell und effizient Mock-APIs erstellen möchten.

Egal, ob Sie Anfänger oder erfahrener Entwickler sind, MockServer bietet die Tools, die Sie zum Simulieren des API-Verhaltens benötigen, ohne dass Sie einen vollständigen Express-Server einrichten müssen. Probieren Sie es aus und machen Sie Ihre API-Tests und Prototypen reibungsloser und produktiver.