Diseño y Desarrollo de Servicios Web - Proyecto
Diseño y Desarrollo de Servicios Web - Proyecto
Id Evidencia.
GA7-220501096-AA5-EV03
Aprendices.
German Lopera
Instructor.
Carlos Hernández
Ficha :2758342
2025
INTRODUCCIÓN
Para que saber que es un API debes irte a las siglas que conforman el concepto de esta
herramienta tecnológica. El acrónimo API responde a la expresión anglosajona application
Se refiere a un conjunto de protocolos que se utiliza para integrar las funciones de distintas
Se requiere realizar los servicios necesarios para cumplir con las características del software a
realizar para el proyecto formativo y la documentación de cada uno de los servicios.
app.use(cors());
app.options('*', cors())
//middleware app.use(express.json());
app.use(morgan('tiny'));
app.use(authJwt());
app.use('/public/uploads', express.static( dirname +
'/public/uploads')); app.use(errorHandler);
//Routes
const categoriesRoutes = require('./routes/categories'); const productsRoutes
= require('./routes/products'); const usersRoutes = require('./routes/users');
const ordersRoutes = require('./routes/orders'); const api =
process.env.API_URL;
app.use(`${api}/categories`, categoriesRoutes);
app.use(`${api}/products`, productsRoutes);
app.use(`${api}/users`, usersRoutes); app.use(`$
{api}/orders`, ordersRoutes);
//Database mongoose.connect(process.env.CONNECTION_STRING, {
useNewUrlParser: true,
useUnifiedTopology: true,
dbName: 'eshop-database'
})
.then(()=>{
console.log('Database Connection is ready...')
})
.catch((err)=> { console.log(err);
})
if(!userList) {
res.status(500).json({success:
false})
}
res.send(userList);
})
router.get('/:id', async(req,res)=>{
const user = await User.findById(req.params.id).select('-passwordHash');
if(!user) {
res.status(500).json({message: 'The user with the given ID was
not found.'})
}
res.status(200).send(user);
})
router.post('/', async
(req,res)=>{ let user = new
User({
name: req.body.name,
email: req.body.email,
passwordHash: bcrypt.hashSync(req.body.password, 10),
phone: req.body.phone, isAdmin:
req.body.isAdmin, street: req.body.street,
apartment: req.body.apartment, zip:
req.body.zip,
city: req.body.city,
country: req.body.country,
})
user = await user.save();
if(!user)
return res.status(400).send('the user cannot be created!')
res.send(user);
})
if(!user)
return res.status(400).send('the user cannot be created!')
res.send(user);
})
})
router.post('/register', async
(req,res)=>{ let user = new User({
name: req.body.name,
email: req.body.email,
passwordHash: bcrypt.hashSync(req.body.password, 10),
phone: req.body.phone, isAdmin:
req.body.isAdmin, street: req.body.street,
apartment: req.body.apartment, zip:
req.body.zip,
city: req.body.city,
country: req.body.country,
})
user = await user.save();
if(!user)
return res.status(400).send('the user cannot be created!')
res.send(user);
})
if(!userCount) {
res.status(500).json({success: false})
}
res.send({
userCount: userCount
});
})
module.exports = router;
MÓDULO DE RUTAS – PRODUCTOS
const {Product} =
require('../models/product'); const express =
require('express');
const { Category } = require('../models/category'); const router =
express.Router();
const mongoose = require('mongoose'); const multer =
require('multer');
const FILE_TYPE_MAP =
{ 'image/png': 'png',
'image/jpeg': 'jpeg',
'image/jpg': 'jpg'
}
if(isValid) {
uploadError = null
}
cb(uploadError, 'public/uploads')
},
filename: function (req, file, cb) {
if(!productList) {
res.status(500).json({success:
false})
}
res.send(productList);
})
router.get(`/:id`, async (req, res) =>{ const product = await
Product.findById(req.params.id).populate('category');
if(!product) {
res.status(500).json({success:
false})
}
res.send(product);
})
if(!product)
return res.status(500).send('The product cannot be created')
res.send(product);
})
if(!product)
return res.status(500).send('the product cannot be updated!')
res.send(product);
})
if(!productCount) {
res.status(500).json({success:
false})
}
res.send({
productCount: productCount
});
})
router.get(`/get/featured/:count`, async (req, res) =>{ const count =
req.params.count ? req.params.count : 0
const products = await Product.find({isFeatured: true}).limit(+count);
if(!products) {
res.status(500).json({success:
false})
}
res.send(products);
})
router.put(
'/gallery-images/:id',
uploadOptions.array('images', 10),
async (req, res)=> {
if(!mongoose.isValidObjectId(req.params.id)) {
return res.status(400).send('Invalid Product Id')
}
const files = req.files let
imagesPaths = []; const basePath
=
`${req.protocol}://${req.get('host')}/public/uploads/`;
if(files) {
files.map(file =>{
imagesPaths.push(`${basePath}${file.filename}`);
})
}
if(!product)
return res.status(500).send('the gallery cannot be updated!')
res.send(product);
}
)
module.exports = router;
MÓDULO DE RUTAS – CATEGORÍAS
const {Category} =
require('../models/category'); const express =
require('express');
const router = express.Router();
if(!categoryList) {
res.status(500).json({success:
false})
}
res.status(200).send(categoryList);
})
router.get('/:id', async(req,res)=>{
const category = await Category.findById(req.params.id);
if(!category) {
res.status(500).json({message: 'The category with the given ID
was not found.'})
}
res.status(200).send(category);
})
router.post('/', async
(req,res)=>{ let category =
new Category({
name: req.body.name, icon:
req.body.icon, color:
req.body.color
})
category = await category.save();
if(!category)
return res.status(400).send('the category cannot be created!')
res.send(category);
})
if(!category)
return res.status(400).send('the category cannot be created!')
res.send(category);
})
module.exports = router;
MÓDULO DE RUTAS – SOLICITUDES
const {Order} =
require('../models/order'); const express
= require('express');
const { OrderItem } = require('../models/order-item'); const router =
express.Router();
if(!orderList) {
res.status(500).json({success:
false})
}
res.send(orderList);
})
if(!order) {
res.status(500).json({success: false})
}
res.send(order);
})
return newOrderItem._id;
}))
const orderItemsIdsResolved = await orderItemsIds;
if(!order)
return res.status(400).send('the order cannot be created!')
res.send(order);
})
if(!order)
return res.status(400).send('the order cannot be update!')
res.send(order);
})
if(!totalSales) {
return res.status(400).send('The order sales cannot be
generated')
}
res.send({totalsales: totalSales.pop().totalsales})
})
if(!orderCount) {
res.status(500).json({success:
false})
}
res.send({
orderCount: orderCount
});
})
if(!userOrderList) {
res.status(500).json({success:
false})
}
res.send(userOrderList);
})
module.exports = router;
PRUEBAS EN POSTMAN
Get Productos
POST PRODUCTOS
CONEXIÓN A LA BASE DE DATOS
CONCLUSIÓN
Se pudo comprobar la utilidad que ofrece una webService para realizar pruebas de
nuestro sistema para que sea utilizado por otras aplicaciones sin la necesidad de requerir
https://zajuna.sena.edu.co/Repositorio/Titulada/institution/SENA/Tecnologia/228118/Contenido/
OVA/CF33/index.html#/