Modelo de Informe Practica #12 - 2022
Modelo de Informe Practica #12 - 2022
Modelo de Informe Practica #12 - 2022
GRUPO N° 3
Presentado por:
2020700992 FERNANDEZ LOPEZ, LUCIANA ALEXANDRA
2020245441 ORDOÑEZ ARRATIA, JOSEPH FERNANDO
2020231692 YANARICO SUYO, CINTHYA DANIELA
ii
Práctica N° 12: Servicios REST Node.js
RECONOCIMIENTOS
Los autores de este trabajo reconocen con gratitud a los creadores de Node JS y Express
PALABRAS CLAVES
iii
Práctica N° 12: Servicios REST Node.js
ÍNDICE
1. RESÚMEN 1
2. INTRODUCCIÓN ...........................................................................................................1
3. MARCO TEÓRICO ........................................................................................................1
3.1 REST .....................................................................................................................1
3.2 API .........................................................................................................................2
4. EXPERIENCIAS DE PRÁCTICA ...................................................................................3
4.1 Crear el entorno del proyecto ...............................................................................3
4.2 Verificando los registros extraídos .......................................................................6
4.3 USAR JWT ......................................................................................................... 15
5. EJERCICIOS............................................................................................................... 17
5.1 Ejercicio 1........................................................................................................... 17
5.2 Ejercicio 2........................................................................................................... 22
6. CONCLUSIONES DE LA PRÁCTICA: ....................................................................... 25
7. CUESTIONARIO ......................................................................................................... 25
8. BIBLIOGRAFÍA ........................................................................................................... 28
iv
Práctica N° 12: Servicios REST Node.js
v
Práctica N° 12: Servicios REST Node.js
1. RESÚMEN
En el presente informe se desarrolla el uso de REST y API, sabiendo que la Transferencia de Estado
Representacional (REST) es un estilo arquitectónico que define un conjunto de restricciones que se
utilizan para crear servicios web. La API REST es una forma de acceder a los servicios web de
forma sencilla y flexible, sin necesidad de procesarlos.
Igual que una interfaz de usuario permite la interacción y comunicación entre un software y una
persona, una API (acrónimo de Application Programming Interface) facilita la relación entre dos
aplicaciones para el intercambio de mensajes o datos. Los extremos de la API de Postman le
permiten integrar Postman dentro de su cadena de herramientas de desarrollo. Puede agregar nuevas
colecciones, actualizar colecciones existentes, actualizar entornos y agregar y ejecutar monitores
directamente a través de la API. Esto le permite acceder mediante programación a los datos
almacenados en su cuenta de Postman. Un procedimiento almacenado (stored procedure en inglés)
es un programa almacenado físicamente en una base de datos. Su implementación varía de un gestor
de bases de datos a otro. La ventaja de un procedimiento almacenado es que, al ser ejecutado, en
respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual
usualmente corre en un servidor separado.
2. INTRODUCCIÓN
Una API REST es una interfaz de comunicación entre sistemas de información que usa el protocolo
de transferencia de hipertexto (hypertext transfer protocol o HTTP, por sus siglas en inglés) para
obtener datos o ejecutar operaciones sobre dichos datos en diversos formatos, como pueden ser
XML o JSON. Hay cuatro tipos de API de servicios web habituales entre los desarrolladores: SOAP
(Simple Object Access Protocol), un protocolo estándar de intercambio de información y datos en
XML entre dos objetos; XML-RPC, un protocolo de llamada a procedimiento remoto que usa XML
como formato de datos y llamadas HTTP como sistema de comunicación; JSON-RPC, mismo
protocolo pero en formato JSON; y REST (Representational State Transfer), arquitectura de
software para sistemas hipermedia en la World Wide Web; una API REST usa el protocolo HTTP.
REST es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones
sobre esos datos en todos los formatos posibles, como XML y JSON. Se apoya en HTTP, los verbos
que utiliza son exactamente los mismos, con ellos se puede hacer GET, POST, PUT y DELETE. De
aquí surge una alternativa a SOAP.Cuando hablamos de SOAP hablamos de una arquitectura
divididas por niveles que se utilizaba para hacer un servicio, es más complejo de montar como de
gestionar y solo trabajaba con XML.
JSON Web Token (abreviado JWT) es un estándar abierto basado en JSON para la creación de
tokens de acceso que permiten la propagación de identidad y privilegios, Etán diseñados para ser
compactos, poder ser enviados en las URLs -URL-safe- y ser utilizados en escenarios de Single
Sign-On (SSO). Los privilegios de los JSON Web Tokens pueden ser utilizados para propagar la
identidad de usuarios como parte del proceso de autenticación entre un proveedor de identidad y un
proveedor de servicio, o cualquiera otro tipo de privilegios requeridos por procesos empresariales.
1
Práctica N° 12: Servicios REST Node.js
3. MARCO TEÓRICO
3.1 REST
¿Qué es?
Conocida como Transferencia de Estado Representacional, una arquitectura aplicada en las
aplicaciones Web y usa el protocolo HTTP ya sea para obtener o generar operaciones sobre los
datos, devolviéndolos en formatos como XML y JSON, entre las operaciones encontramos POST,
GET, PUT Y DELETE.
Existen 6 limitantes que un sistema REST aplica:
o La arquitectura cliente/servidor: La interfaz puede evolucionar de manera independiente con
respecto al servidor, y el servidor no se preocupa por la interfaz y estado de esta.
o Que es stateless: Es el No estado, indica que entre el cliente y el servidor no existe contexto
o Cacheability: Habla de que algunas respuestas puedan ser almacenadas en cache.
o El sistema puede estar basado en capas: El servidor debe estar compuesto de distintas capas
como las de presentación, datos e información.
o Que posee una interfaz uniforme: Estándar para la interfaz de comunicación entre el cliente
y servidor.
o Pueden enviar código On Deman (opcional): el servidor puede enviar scripts de código.
¿Cúando se usa?
Rest se aplica cuando se necesita manipular y realizar operaciones sobre datos que están
almacenados en una base de datos, permite la separación entre cliente servidor por ende otorga
escalabilidad si deseamos enfocarnos en el lado servidor, posee una gran comunidad con amplia
documentación, se apoya en HTTP generando una petición Request que solo espera un response y
este ofrece los métodos post, el ingreso de datos o recursos, get, para la recepción del recurso, put,
para actualizar el recurso y delete para eliminarlo.
¿Cómo se configura y se instala?
Teniendo en cuenta que REST hace alusión a las acciones de post, get, put y delete. Primero es
necesario instalar ciertos paquetes.
o Paquete Node (npm init -f)
o Paquete express (npm install express)
o Paquete mysql (npm install mysql)
o Paquete cors (npm install cors)
o Una vez instalados llamar al paquete y otorgarle una variable, procede a realizar la conexión
con la base de datos de preferencia y levantar el servidor.
o Definir los endpoints mediante consultas sql de get, post, delete y put.
1
Práctica N° 12: Servicios REST Node.js
3.2 API
¿Qué es?
Aplicattion Programing Interface o interfaz de programación de aplicaciones, son reglas de como
una aplicación puede comunicarse con otra, los datos se encuentran en el servidor y mediante un
API se accede a ellos desde la aplicación.
Existen distintos API:
o API´s de servicios web: Permite el intercambio de información entre un servidor y cliente
mediante el uso del protocolo http, la información será transferida en un formato xml o json.
o API’s de bibliotecas: Permite hacer uso de funciones, métodos o rutinas mediante una
biblioteca que deberá ser importada a la aplicación como por ejemplo el API de Google
maps para Java Script.
o API’s basadas en clases: Permite hacer uso de clases ya definidos que poseen ya una lógica
de programación para agilizar el proceso de desarrollo de software como la API de Java, que
son clases organizadas en paquetes.
o API’s de sistemas operativos: Permite que los programas interactúen con el sistema de tal
manera que se pueda tener acceso como el teclado, mouse, la interfaz gráfica, etc.
¿Cúando se usa?
Una API se aplica cuando es necesaria la comunicación entre dos aplicaciones sin necesidad que
ambas sean conscientes entre ellas, buscando que la programación no se inicie desde cero.
¿Cuáles son las ventajas de usarlo?
Entre las ventajas de una API encontramos:
Facilita el desarrollo de software, ahorra tiempo, le otorga flexibilidad y simplifican el diseño. Por
otro lado, también permiten mantener la seguridad y control, porque tienes la decisión de a quien se
le habilita y otorga el permiso.
¿Cómo se configura e instala?
Se definen los distintos endpoint mediante una función los cuales usaran get, post, put y delete, el
cual pide un Request y enviara un response.
Se define las consultas SQL, las cuales pueden ser escritas directamente en el código (poco
recomendable) o definir procedimientos en MySQL, los cuales serán almacenados en variables en
el código.
2
Práctica N° 12: Servicios REST Node.js
4. EXPERIENCIAS DE PRÁCTICA
4.1 Crear el entorno del proyecto
3
Práctica N° 12: Servicios REST Node.js
4
Práctica N° 12: Servicios REST Node.js
-------------------------------------------------------------------------------
Index.js
//conectar a la base de datos
var mysqlConnection = mysql.createConnection(
{
host: 'localhost', //host
port: '33065', //puerto
user: 'root', //usuario
password: '', //contraseña
database: 'barbershop', //base de datos
}
);
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
5
Práctica N° 12: Servicios REST Node.js
Index.js
//agregando codigo que convierte los registros de las tabla a formato json.
app.use(bp.json());
app.use(bp.urlencoded({
extended: true,
}));
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Index.js
//crear el servidor
var server = app.listen(3000,"127.0.0.1",function(){
var host = server.address().address
var port = server.address().port
});
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Index.js
//API que trae todos los books
app.get('/books',function(req,res){
//res.send('ok');
mysqlConnection.query('select * from books',function(error,result){
if(error) throw error;
res.end(JSON.stringify(result))
});
});
-------------------------------------------------------------------------------
a) UTILIZANDO POSTMAN:
1. Ejecutar el programa postman o de lo contrario entrar a la página web loguearse y utilizarlo desde
la internet.
6
Práctica N° 12: Servicios REST Node.js
7
Práctica N° 12: Servicios REST Node.js
-------------------------------------------------------------------------------
Index.js
//API que recupera dependendiendo del ID
app.get('/books/:id',function(req,res){
mysqlConnection.query('select * from books where id =?',
[req.params.id], function (error, results) {
if(error) throw error;
res.end(JSON.stringify(results))
});
});
-------------------------------------------------------------------------------
2. Ir a postman y verificar el funcionamiento del último método recuperando otra vez del id del
registro:
8
Práctica N° 12: Servicios REST Node.js
9
Práctica N° 12: Servicios REST Node.js
10
Práctica N° 12: Servicios REST Node.js
11
Práctica N° 12: Servicios REST Node.js
d) CREAR :
1. Crear la carpeta config y dentro de la misma el archivo connection.js y agregar el siguiente código:
//conexion
//conectar a la base de datos
var mysqlConnection = mysql.createConnection(
{
host: 'localhost',
port: '33065',
user: 'root',
password: '',
database: 'biblioteca',
}
);
12
Práctica N° 12: Servicios REST Node.js
});
//exportando el modulo
module.exports = mysqlConnection;
-----------------------------------------------------------------------
2. Agregar la carpeta routes y en ella el archivo books.js e ingresar el siguiente código:
//llamando al procedimiento
let sql_all = 'call ups_listar_books()';
13
Práctica N° 12: Servicios REST Node.js
//procedimientos
let sql_all = 'call ups_listar_books()';
let sql_insert = 'call ups_listar_books()';
app.get('/api',(req,res) => {
res.json({
mensaje:"Uso de JWT y Express. Desarrollo de Aplicaciones"
});
});
app.post('/api/login', (req,res)=>{
const user = {
id:2020245441,
username:"Joseph",
email:"[email protected]"
}
app.post('/api/posts', verifyToken,(req,res)=>{
jwt.verify(req.token, 'secretkey', (err,authData)=>{
if(err){
res.sendStatus(403);
}else{
res.json({
mensaje:"Post creado...",
authData
15
Práctica N° 12: Servicios REST Node.js
});
}
})
});
function verifyToken(req,res,next){
const bearerHeader = req.headers['authorization'];
16
Práctica N° 12: Servicios REST Node.js
5. EJERCICIOS
5.1 Ejercicio 1
DELIMITER //
CREATE PROCEDURE ver_entradas()
BEGIN
SELECT * FROM entradas;
END
//
DELIMITER //
CREATE PROCEDURE verUnaEntrada (in val int)
BEGIN
SELECT * FROM entradas WHERE id = val;
END;
//
DELIMITER //
17
Práctica N° 12: Servicios REST Node.js
DELIMITER //
CREATE PROCEDURE actualizarEntrada(
asiento varchar(4),
prec float,
tipo varchar(8),
cod int)
BEGIN
UPDATE entradas SET numAsiento = asiento, precio = prec, tipoEntrada =
tipo WHERE id = cod;
END
//
DELIMITER //
CREATE PROCEDURE eliminarEntrada(
cod int
)
BEGIN
DELETE FROM entradas WHERE id = cod;
END;
//
*******************************************************************************
connection.js
-------------------------------------------------------------------------------
//variable para mysql
var mysql = require('mysql');
module.exports = mysqlConnection;
*******************************************************************************
App.js
-------------------------------------------------------------------------------
//variable para express
var express = require('express');
//variable app tipo expres
var app = express();
//indicar el uso de json
app.use(express.json());
app.post('/api/entradas',(req, res)=>{
let data =
{numAsiento:req.body.numAsiento,precio:req.body.precio,tipoEntrada:req.body.tip
oEntrada};
mysqlConnection.query(sql_insert,[data.numAsiento,data.precio,data.tipoEntrada]
, function(error,results){
if(error){
throw error;
} else {
res.send(results);
}
});
});
19
Práctica N° 12: Servicios REST Node.js
app.put('/api/entradas/:id',(req,res)=>{
let id = req.params.id;
let numAsiento = req.body.numAsiento;
let precio = req.body.precio;
let tipoEntrada = req.body.tipoEntrada;
});
app.delete('/api/entradas/:id', (req,res)=>{
mysqlConnection.query(sql_delete,[req.params.id], function(error,filas){
if(error){
throw error;
} else {
res.send(filas);
}
});
});
app.listen('3000', function() {
console.log('Servidor funcionando...');
})
*******************************************************************************
OPERACION GET EN POSTMAN
GET: localhost/3000/api/entradas
20
Práctica N° 12: Servicios REST Node.js
21
Práctica N° 12: Servicios REST Node.js
5.2 Ejercicio 2
index.js
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
// endpoint
app.get('/api',(req,res) => {
res.json({
mensaje:"Uso de JWT y Express. Desarrollo de Aplicaciones"
});
});
app.post('/api/login', (req,res)=>{
const user = {
id:2020245441,
username:"Joseph",
email:"[email protected]"
}
// endpoint
app.post('/api/posts', verifyToken,(req,res)=>{
jwt.verify(req.token, 'secretkey', (err,authData)=>{
if(err){
res.sendStatus(403);
}else{
res.json({
mensaje:"Endpoint",
authData
});
}
})
});
function verifyToken(req,res,next){
const bearerHeader = req.headers['authorization'];
23
Práctica N° 12: Servicios REST Node.js
}
}
app.listen(5000,() => {console.log("Servidor iniciado en
http://localhost:5000")});
24
Práctica N° 12: Servicios REST Node.js
6. CONCLUSIONES DE LA PRÁCTICA:
a) A partir de la elaboración de la experiencia práctica pudimos comprender que la implementación
de una arquitectura REST, actualmente es crucial para cualquier tipo de aplicación relacionada
con la manipulación de datos, es decir, la gran mayoría de las aplicaciones desarrolladas
actualmente y en el futuro utilizarán esta estructura. Por ende, este tema es crucial de aprender
para todo aquel enfocado en el desarrollo de aplicaciones web.
b) Por otro lado, al realizar la API REST, se pudo apreciar la importancia de NO aplicar SQL
dentro del código, dado que originara problemas de seguridad a largo plazo, en su lugar la
llamada a procedimientos que fueron previamente definidos en la base de datos es la mejor
opción para un desarrollo de API REST óptimo.
c) Durante el desarrollo de la practica pudimos notar la importancia de la comunicación entre los
componentes de software, el proceso que siguen las llamadas y los elementos que establecen el
proceso del funcionamiento de una API.
d) Una API RESTful permite la conectividad entre piezas de software y utiliza las peticiones HTTP
para realizar operaciones siguiendo un estándar.
e) Para que las empresas trabajen juntas sin codificar a mano los enlaces de afiliados, deben
estandarizar su modelo de gobierno en lugar de invertir en sus propios sistemas. REST
proporciona un alto nivel de estandarización. Por lo tanto, si los servicios web basados en SOAP
no implementan este mecanismo, fallarán, marcando el comienzo de la era de los servicios web
basados en REST.
f) La exposición de los recursos del sistema a través de la API REST es muy flexible, por lo que
la información se puede entregar a diferentes aplicaciones en diferentes formatos. REST ayuda
a cumplir con los requisitos de integración que son críticos en la construcción de sistemas donde
los datos se pueden combinar y ampliar fácilmente. Desde esta perspectiva, los servicios REST
se convierten en algo mucho más grande.
7. CUESTIONARIO
es igual a un OK. Encontramos cinco rangos, entre 1xx es información, 2xx está relacionado
al éxito, 3xx corresponde a la redirección, 4xx será un error de cliente y 5xx un error del
servidor.
7. ¿Qué son los métodos HTTP?
Encontramos los métodos de GET o RETRIEVE, permite recuperar los recursos, el método
de POST o CREATE, permite crear recursos, el método PUT o UPDATE, permite alterar los
recursos para modificarlos y el método DELETE que permite eliminar al recurso.
8. ¿Puede indicar las desventajas de los servicios web RESTful?
Se puede tener más de un servidor, pero estos no se reconocen entre sí, no se tiene
conocimiento de los usuarios que inician sesión o los datos que se le entregaron, ni tampoco
se tiene seguimiento de la solicitud evitando saber en qué servidor cayo. [2]
9. Defina la mensajería en términos de servicios web RESTful.
Encontramos dos puntos, el cliente y el servidor, ambos se comunicarán mediante una API, el
mensaje sale del cliente, llega al servidor y si es recibido correctamente, vuelve a salir hacia
el otro cliente.
10. ¿Diferencia entre SOAP y REST?
SOAP REST
- Es un protocolo para implementar en el - Es una arquitectura de diseño para el
servicio web. desarrollo de servicios web.
- Un criterio se debe cumplir - Un criterio no es necesario cumplirlo
obligatoriamente. completamente.
- Admite la transferencia únicamente de - Se puede transferir XML, JSON, MIME,
XML etc.
- Una lectura no se almacena en el cache. - Se puede almacenar la consulta en el
- Es más lento cache.
- Tiene sus propios protocolos de seguridad. - Es más rápido.
- Utilizado cuando los datos requieren ser - Solo tomara precauciones de seguridad.
transportados con estado y mayor - Ofrece la escalabilidad y fácil
confiabilidad. mantenimiento.
11. Al crear URI para servicios web, ¿cuáles son las mejores prácticas que se deben seguir?
Se deberían seguir los siguientes puntos:
El URI debe estar estructurado de una forma comprensible y de fácil entendimiento para el
cliente y servidor
La representación ha de ser completa independientemente de su estructura, si existe una
vinculación con otros recursos, estos también deben ser considerados y manejados.
12. ¿Cuáles son las mejores prácticas para desarrollar servicios web RESTful?
Se deben seguir los siguientes puntos:
La entrada al servidor debe ser validadas, cada una de ellas, se deben encontrar bien formadas,
no deben pasar datos sensibles mediante la URL, debe existir la autenticación, uso de error
HTTP para las fallas, el URI debe ser fácil de comprender.
13. ¿Qué son los métodos idempotentes? ¿Cuál es su relevancia en el ámbito de los servicios web
RESTful?
Cuando se envía el mismo URI, habrán algunos métodos HTTP que generaran el mismo
resultado en el servidor, por ejemplo, el método GET.
Estos métodos son importantes porque garantizan la coherencia en las actividades.
14. ¿Cuáles son las diferencias entre REST y AJAX?
REST AJAX
El elemento XMLHttpRequest se usa para Se utilizan recursos para formar una URI y
las solicitudes direccionadas al el request/response.
26
Práctica N° 12: Servicios REST Node.js
15. ¿Puede decir cuáles son los componentes principales de la solicitud HTTP?
Existirá un verbo correspondiente al método GET, PUT, POST, DELETE.
El URI para identificar al recurso disponible
La versión HTTP para especificar la versión.
El encabezado de la solicitud
Cuerpo de la solicitud
16. ¿Cuáles son los componentes principales de la respuesta HTTP?
Se encuentra compuesto de cuatro componentes:
El código de estado es el código que enviara el servidor en respuesta a la solicitud del recurso.
La versión HTTP, la versión de http indica la versión del protocolo.
Encabezado de la respuesta, aquí se haya al metadato, indica cosas como la fecha de respuesta,
etc.
Cuerpo de la respuesta, se haya el recurso que el servidor devuelve.
17. Defina el direccionamiento en términos de servicios web RESTful.
Debe contar con una interfaz uniforme, las direcciones contaran con una única dirección y
punto valido de acceso.
18. ¿Cuáles son las diferencias entre PUT y POST en REST?
PUT: Este permite alterar el recurso que ya existe mediante un identificador y es idempotente.
POST: Enviara el recurso al URI, será el servidor quien decida que realizar con los datos que
recibe, no es idempotente.
19. ¿Qué hace que los servicios REST sean fácilmente escalables?
El hecho de que sean stateless o sin estado, permiten que las solicitudes se distribuyan de
manera más sencilla entre los diferentes servidores.
20. ¿Qué es un JSON Web Token?
Este es un estándar, mecanismo que permite propagar entre dos lados de una forma segura,
aplicando privilegios que se encuentran de codificados en JSON, los cuales se encontraran
dentro de un payload que ira firmada de manera digital.
21. ¿Cuándo se deben utilizar los JSON Web Token?
Sirven para comunicar dos partes de la identidad de un usuario, permitiría la implementación
de una autenticación de usuario de una forma más segura.
22. ¿Cuál es la estructura de los JSON Web Token?
Esta formado de tres partes:
El header, donde se indicará el algoritmo y el tipo de token.
El payload, será el lugar donde se presenten los datos del usuario, sus privilegios y demás
información.
El signature, esta firma confirmara que el token sea válido.
23. ¿Cómo funcionan los JSON Web Token?
Validara la identidad de quien ingresa a la página, una vez que haya ingresado con anterioridad
a su inicio de sesión, haciendo que el login no sea necesario cada vez.
24. ¿Cómo funciona un JSON Web Token?
Este se encuentra firmado de manera digital y verificara la identidad del usuario.
27
Práctica N° 12: Servicios REST Node.js
8. BIBLIOGRAFÍA
[1] ua, «Introducción a los Servicios Web RESTful,» [En línea]. Available:
http://www.jtech.ua.es/j2ee/restringido/cw/sesion11-apuntes.pdf. [Último acceso: 24
Noviembre 2022].
[2] Desarrollo Web, «Ventajas e inconvenientes de API REST para el desarrollo,» 19 Diciembre
2014. [En línea]. Available: https://desarrolloweb.com/articulos/ventajas-inconvenientes-
apirest-
desarrollo.html#:~:text=Desventajas%20del%20desarrollo%20basado%20en%20REST&tex
t=En%20un%20esquema%20REST%20puedes,servidor%20puede%20caer%20una%20solic
itud.. [Último acceso: 24 Noviembre 2022].
28