APIGit
2024-11-15
La creación de API simuladas es un aspecto fundamental del desarrollo de software, ya sea con fines de prueba o de creación rápida de prototipos. APIGIT MockServer ofrece una solución optimizada que se basa en Express.js y proporciona un entorno simplificado para definir el comportamiento del servidor simulado sin necesidad de configurar manualmente una aplicación Express.
APIGIT MockServer opera dentro de un entorno de pruebas de Node.js y aprovecha una aplicación Express.js para simplificar la creación de API simuladas. Permite el desarrollo y el manejo rápidos de varias solicitudes HTTP mediante definiciones sencillas. En esta introducción, exploraremos las características de MockServer, destacaremos sus capacidades y demostraremos cómo puede comenzar rápidamente con ejemplos prácticos.
lodash
,moment
,faker
y más están preinstalados, lo que agiliza la creación de respuestas simuladas dinámicas.MockServer funciona permitiéndole definir rutas API usando**mock
** objeto. imitares un globalAplicación Express.jscreado automáticamente por el marco de servidor simulado apigit subyacente. Puede definir rutas usando mock.[method], siguiendo las pautas proporcionadas en la documentación de Express.js.
A continuación se muestra una descripción general de cómo MockServer simplifica la creación de API:
mock.[method](...)
**para definir rutas y manejadores de solicitudes.req
y res
para gestionar solicitudes y respuestas HTTP.El siguiente ejemplo muestra lo fácil que es crear rutas usando 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");
});
Tenga en cuenta que**mock.define()
ha quedado obsoleto y se proporciona únicamente con fines de compatibilidad. Recomendamos utilizarmock.[method]
En cambio, a medida que se alinea con el nativoExpress.js
** acercarse.
Al igual que en Express.js, puedes usar middleware para procesar solicitudes antes de que lleguen al controlador de ruta final:
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!');
});
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.
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:
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 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.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
});
});
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:
MockServer proporciona unastate
objeto, 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.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" });
});
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.js
archivo 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:
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
para 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.
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.
© 2024 APIGit Inc.