APIGit
2024-11-15
Creare API fittizie è un aspetto critico dello sviluppo software, sia per scopi di test che per la prototipazione rapida. APIGIT MockServer offre una soluzione semplificata avvolgendo Express.js, fornendo un ambiente semplificato per definire il comportamento del server fittizio senza la necessità di impostare e configurare manualmente un'applicazione Express.
APIGIT MockServer opera all'interno di un sandbox Node.js, sfruttando un'app Express.js per semplificare la creazione di API fittizie. Consente uno sviluppo e una gestione rapidi di varie richieste HTTP tramite definizioni semplici. In questa introduzione, esploreremo le funzionalità di MockServer, evidenzieremo le sue capacità e mostreremo come puoi iniziare rapidamente con esempi pratici.
lodash
,moment
,faker
e altri ancora sono preinstallati, semplificando la creazione di risposte simulate dinamiche.MockServer funziona consentendoti di definire percorsi API utilizzando**mock
oggetto.deridereè un globaleApplicazione Express.js**creato automaticamente dal framework del server mock apigit sottostante. Puoi definire percorsi usando mock.[method], seguendo le linee guida fornite nella documentazione di Express.js.
Ecco una panoramica di come MockServer semplifica la creazione di API:
mock.[method](...)
**per definire percorsi e gestori delle richieste.req
E res
per gestire le richieste e le risposte HTTP.L'esempio seguente mostra quanto sia semplice creare percorsi utilizzando MockServer:
mock.get("/user/:name", function (req, res) {
return res.status(200).send("hello" + req.params.name);
});
mock.post('/test-urlencoded', (req, res) => {
console.log('Received x-www-form-urlencoded data:', req.body);
res.status(200).send({ message: 'Received x-www-form-urlencoded data', data: req.body });
});
mock.get('/testauth', exampelAuthMiddleware, (req, res) => {
res.status(200).send('This route is to deomostrate auth through middleware ');
});
mock.get('/testmd2', firstMiddleware, secondMiddleware, (req, res) => {
res.status(200).send('This route has multiple middlewares!');
});
// !!!== mock.define is deprecated and provided for compatibility only. Please use mock.[method] instead, as it follows the native Express.js approach. !!!
mock.delete("/user/:name", function(req, res) {
// handle req
res.status(200).send("success");
});
Si prega di notare che**mock.define()
è stato deprecato ed è fornito solo per scopi di compatibilità. Consigliamo di utilizzaremock.[method]
invece, poiché si allinea con il nativoExpress.js
**approccio.
Proprio come in Express.js, puoi utilizzare il middleware per elaborare le richieste prima che raggiungano il gestore del percorso finale:
const exampelAuthMiddleware = (req, res, next) => {
const authHeader = req.headers['authorization'];
if (!authHeader) {
return res.status(401).send('Authorization header missing');
}
const token = authHeader.split(' ')[1];
if (!token) {
return res.status(401).send('Token missing');
}
try {
const SECRET_KEY = 'your-secret-key';
const decoded = jwt.verify(token, SECRET_KEY);
req.user = decoded;
next();
} catch (err) {
return res.status(403).send('Invalid token');
}
};
function firstMiddleware(req, res, next) {
console.log('First middleware');
next();
}
function secondMiddleware(req, res, next) {
console.log('Second middleware');
next();
}
mock.use((req, res, next) => {
console.log("middware for all routes");
next();
});
mock.get('/testauth', exampelAuthMiddleware, (req, res) => {
res.status(200).send('This route is to deomostrate auth through middleware ');
});
mock.get('/testmd2', firstMiddleware, secondMiddleware, (req, res) => {
res.status(200).send('This route has multiple middlewares!');
});
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.
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:
mock.get('/repository/:user/:repo', (req, res) => {
const { user, repo } = req.params;
res.json({
message: 'Repository Details',
user: user,
repo: repo
});
});
mock.get('/search', (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
});
});
mock.get('/not-found', (req, res) => {
res.status(404).json({
message: 'Resource not found',
code: 404
});
});
mock.get('/single-header', (req, res) => {
res.set('Content-Type', 'application/json');
res.set('X-Custom-Header', ['value1', 'value2']);
res.json({ message: 'Headers set successfully!' });
});
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.get('/test-libs', (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:
MockServer fornisce unstate
oggetto, 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.post('/users', (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" });
});
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.js
file 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:
module.exports
.// main.js
// Require handler modules at the top
const { userPostHandler, userDeleteHandler } = require('./handlers/userHandlers');
// Define routes
mock.post('/user/:name', userPostHandler);
mock.delete('/user/:name', userDeleteHandler);
module.exports
per 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.
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.
© 2024 APIGit Inc.