Está en la página 1de 44

Tutoría magistral - ET2: Backend

(Creación de la BD, Conexión a la BD,


Modelos y rutas en el backend, CRUD)
Por equipo de tutores Misión TIC – UIS
Temario
1. Node JS
2. NPM
3. Utilización de NPM
4. Package json
5. Dependencias a utilizar
6. Estructura proyecto (Backend)
7. Bases de datos relacionales
8. Mongo DB
9. Instalación de la BD
10. ¿Qué es una API REST?
¿Qué es?

Node.js® es un entorno de ejecución para JavaScript este entorno de tiempo de ejecución


en tiempo real incluye todo lo que se necesita para ejecutar un programa escrito en
JavaScript.

https://nodejs.org/es/download/
https://www.hostinger.co/tutoriales/instalar-node-js-ubuntu/
¿Qué es?

npm es el sistema de gestión de paquetes por defecto para Node.js.

Cuando nos referimos a “paquetes” en realidad a lo que se hace referencia, es a paquetes


de código que vivirán en una carpeta llamada “node_modules” y tendrán una configuración
que los llamará dentro de un archivo llamado “package.json”.

https://www.npmjs.com/
Verificar instalación

npm –v

Instalar o actualizar NPM

npm install –g npm


Inicialización

npm init

Este comando sirve para crear el archivo package.json. Te guiará y preguntará una serie
de preguntas para rellenar el archivo y así no lo tengas que crear a mano
¿Qué es el Package.json?

Es un archivo de definición o manifiesto para nuestro


proyecto, en el cual especificamos referencias al proyecto como:
autor, repositorio, versión y sobre todo las dependencias, entre
otros.
Para el ciclo 4 utilizaremos ciertas
dependencias que deberemos añadir a
nuestro proyecto (Backend)
Bcrypt-nodejs

npm install bcrypt-nodejs --save

Dependencia usada en proyectos NodeJS para encriptar información

https://github.com/shaneGirish/bcrypt-nodejs
Body-parser

npm install body-parser --save

Dependencia usada para parsear las peticiones en formato JSON

https://www.npmjs.com/package/body-parser
Connect-multiparty

npm install connect-multiparty --save

Dependencia usada para cargar archivos al servidor

https://www.npmjs.com/package/connect-multiparty
Jwt-simple

npm install jwt-simple --save

Dependencia usada para la creación de login usando JSON WEB TOKEN

https://www.npmjs.com/package/jwt-simple
Moment

npm install moment --save

Dependencia usada para fechas y tiempo en el Backend

https://www.npmjs.com/package/moment
Mongoose

npm install mongoose --save

ORM usado en NodeJS para la gestión de bases de datos MongoDB

https://www.npmjs.com/package/mongoose
Mongoose-pagination

npm install mongoose-pagination --save

Dependencia usada en el ORM mongoose para paginar


resultados de consultas
Express

npm install express --save

Framework web minimalista, rápido para Node.js.

https://www.npmjs.com/package/express
Method-override

npm install method-override --save

Le permite usar verbos HTTP como PUT o DELETE en lugares donde el


cliente no lo admite.

https://www.npmjs.com/package/method-override
Tu package debería tener una estructura
así:
Estructura base del backend
El proceso de desarrollo profesional
Web requiere de un orden muy
estricto en la estructura del
proyecto. El Backend es una pieza
muy importante en todo el entorno
de desarrollo, ya que nos permitirá
comunicarnos desde el FrontEnd a la
fuente de datos. Para ello
iniciaremos con la creación de
carpetas o estructura de la siguiente
forma:
Estructura base del backend
• Routers: En esta se especificarán cada
uno de los manejadores de rutas
montables y modulares.
• Models: Especificarán los modelos
donde se trabajan con los datos, por
tanto, contendrá mecanismos para
acceder a la información y también
para actualizar su estado.
• Controllers: funciona para obtener los
datos solicitados de los modelos y crear
la información necesaria para
devolvérsela a los clientes en formato
json.
Index.js

var app = require("./app");


var port = 4000;
app.listen(port, () => {
console.log("servidor corriendo ok")
})
Router.js
const {Router} = require('express');
const router = Router();
export default router;
App.js
var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var methodOverride = require("method-override");
var mongoose = require("mongoose");
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
App.js
app.use((req, res, next) => {

res.header("Access-Control-Allow-Origin", "*");

res.header(

"Access-Control-Allow-Headers",

"Authorization",

"X-API-KEY",

"Origin",
"X-Requested-With",
"Content-Type, Accept",
"Access-Control-Allow-Request-Method"

);
res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");

res.header("Allow", "GET, POST, OPTIONS, PUT, DELETE");

next();

});

module. exports = app;


Base de datos no relacionales (NoSql)

NoSQL se refiere a una gran variedad de tecnologías de bases de


datos que se han desarrollado en respuesta a las necesidades de
desarrollo de las aplicaciones modernas.
Cuándo usar bases de datos no
relacionales
• Los desarrolladores trabajan con aplicaciones que generan enormes volúmenes de datos
nuevos y en constante evolución (estructurados, semiestructurados, no estructurados y
polimórficos).
• Aquellos ciclos de desarrollo en cascada que duraban entre 12 y 18 meses hace tiempo
que pasaron a la historia. Ahora se trabaja en equipos pequeños, que realizan sprints de
desarrollo ágiles con iteraciones rápidas, y que generan código cada semana o cada
quince días, algunos incluso varias veces al día.
• Las aplicaciones que antes servían a un conjunto finito de usuarios ahora se proporcionan
como servicios, que no solo deben funcionar sin interrupción, sino que además tienen que
ser accesibles desde muchos dispositivos distintos y deben poder escalarse a millones de
usuarios de todo el mundo.
• Las organizaciones ahora están recurriendo a arquitecturas de escalamiento horizontal que
utilizan tecnologías de software abierto, servidores básicos y computación en la nube en
lugar de grandes servidores monolíticos e infraestructura de almacenamiento.
tipos de bases de datos no relacionales
• Bases de datos de documentos: en estas bases de datos se empareja cada clave con una
estructura de datos compleja que se denomina 'documento'. Los documentos pueden
contener muchos pares de clave-valor distintos, o pares de clave-matriz, o incluso
documentos anidados.
• Almacenes de grafos: se utilizan para almacenar información sobre redes de datos, como
las conexiones sociales. Ejemplos de almacenes de grafos son Neo4J y Giraph.
• Almacenes de clave-valor: son las bases de datos NoSQL más simples. Cada elemento de
la base de datos se almacena como un nombre de atributo (o «clave»), junto con su valor.
Ejemplos de almacenes de clave-valor son Riak y Berkeley DB. En algunos almacenes de
clave-valor, como Redis, cada valor puede tener un tipo, como «entero», lo que le añade
funcionalidad.
• Bases de datos orientadas a columnas: estas bases de datos, como Cassandra o HBase,
permiten realizar consultas en grandes conjuntos de datos y almacenan los datos en
columnas, en lugar de filas.
Ventajas
• Si se comparan con las bases de datos relacionales, las bases de datos
NoSQL son más escalables y ofrecen un mayor rendimiento; además, su
modelo de datos aborda varias cuestiones que el modelo relacional pasa
por alto:
• Grandes volúmenes de datos estructurados, semiestructurados y no
estructurados en constante cambio
• Sprints de desarrollo ágiles, iteración rápida de los esquemas y generación
frecuente de código
• Programación orientada a objetos flexible y fácil de usar
• Arquitectura de escalado horizontal distribuida geográficamente, en lugar
de una arquitectura monolítica
Esquemas dinámicos
En las bases de datos relacionales es necesario definir los esquemas
antes de añadir los datos. Por ejemplo, si desea almacenar datos de
clientes, como el número de teléfono, nombre y apellidos, dirección,
ciudad y provincia, la base de datos SQL debe conocer de antemano el
tipo de datos que va a almacenar.
Esto dificulta la agilidad en el desarrollo, porque cada vez que se
añaden características, con frecuencia se debe modificar el esquema de
la base de datos. Así, si tras varias iteraciones de desarrollo, decide que
desea almacenar los artículos favoritos de los clientes además de su
dirección y teléfono, deberá añadir esa columna a la base de datos y
luego migrar la base de datos entera al nuevo esquema.
Esquemas dinámicos
Si la base de datos es grande, el proceso será muy lento y la actividad
quedará interrumpida de forma prolongada. Si cambia a menudo los
datos que almacena la aplicación —porque realiza iteraciones
rápidamente— también se interrumpirá la actividad de forma frecuente.
En las bases relacionales tampoco se pueden incluir datos sin ningún
tipo de estructura o desconocidos de antemano.
Las bases de datos NoSQL están diseñadas para que se puedan insertar
datos sin un esquema predefinido. Por ello resulta fácil realizar
modificaciones importantes en las aplicaciones en tiempo real sin
interrupciones del servicio, de modo que el desarrollo es más rápido, la
integración del código es más fiable y los administradores de las bases
de datos tienen menos trabajo.
¿Qué es?
MongoDB es una base de datos NoSQL orientada a documentos que
apareció a mediados de la década de 2000. Se utiliza para almacenar
volúmenes masivos de datos.
A diferencia de una base de datos relacional SQL tradicional,
MongoDB no se basa en tablas y columnas. Los datos se almacenan
como colecciones y documentos.
Los documentos son pares value/key que sirven como unidad básica
de datos. Las colecciones contienen conjuntos de documentos y
funciones. Son el equivalente a las tablas en las bases de datos
relacionales clásicas.
Características
La estructura de un documento corresponde a la forma en que los
desarrolladores construyen sus clases y objetos en el lenguaje de
programación utilizado. En general, las clases no son filas y columnas, sino
que tienen una estructura clara formada por pares Value/key.
Los documentos no tienen un esquema predefinido y los campos pueden
añadirse a voluntad. El modelo de datos disponible en MongoDB facilita la
representación de relaciones jerárquicas u otras estructuras complejas.
Otra característica importante de MongoDB es la
elasticidad de sus entornos. Muchas empresas tienen clusters de más de 100
nodos para bases de datos que contienen millones de documentos.
Arquitectura
La arquitectura de MongoDB se basa en varios componentes principales. En primer lugar, «_id» es
un campo obligatorio para cada documento. Representa un valor único y puede considerarse como
la clave principal del documento para identificarlo dentro de la colección.
Un documento es el equivalente a un registro en una base de datos tradicional. Se compone
de campos de nombre y valor. Cada campo es una asociación entre un nombre y un valor y es similar
a una columna en una base de datos relacional.
Una colección es un grupo de documentos de MongoDB, y se corresponde con una tabla creada
con cualquier otro RDMS como Oracle o MS SQL en una base de datos relacional. No tiene una
estructura predefinida.
Una base de datos es un contenedor de colecciones, al igual que un RDMS es un contenedor de
tablas para las bases de datos relacionales. Cada uno tiene su propio conjunto de archivos en el
sistema de archivos. Un servidor MongoDB puede almacenar múltiples bases de datos.
Por último, JSON (JavaScript Object Notation) es un formato de texto plano para expresar datos
estructurados. Está soportado por muchos lenguajes de programación.
Descarga

https://www.mongodb.com/try/download/community
Compass
La GUI para MongoDB. Compass es una herramienta interactiva para
consultar, optimizar y analizar sus datos en MongoDB.
¿Qué es una API?
Antes de introducir el concepto de Rest API, es necesario explicar qué es una
API (Interfaz de programación de aplicaciones). Es un conjunto de
requisiciones que permite la comunicación de datos entre aplicaciones.
Para eso, la API utiliza requisiciones HTTP responsables de las operaciones
básicas necesarias para la manipulación de datos.
Las principales solicitudes son:
• POST: crea datos en el servidor;
• GET: lectura de datos en el host;
• DELETE: borra la información;
• PUT: registro de actualizaciones
¿Qué es una Rest API?
Rest, que es la abreviación de Representational State Transfer, es un conjunto de restricciones que se
utilizan para que las solicitudes HTTP cumplan con las directrizes definidas en la arquitectura.
Básicamente, las restricciones determinadas por la arquitectura Rest son:
• Cliente-servidor: las aplicaciones existentes en el servidor y el cliente deben estar separadas.
• Sin estado: las requisiciones se realizan de forma independiente, es decir, cada una ejecuta solo
una determinada acción.
• Caché: la API debe utilizar la caché para evitar llamadas recurrentes al servidor.
• Interfaz uniforme: agrupa otros cuatro conceptos en los que se determina que los recursos deben
ser identificados, la manipulación de los recursos debe ser a través de la representación, con
mensajes autodescriptivos y utilizando enlaces para navegar por la aplicación.
Luego, cuando se habla de Rest API, significa utilizar una API para acceder a aplicaciones back-end, de
manera que esa comunicación se realice con los estándares definidos por el estilo de
arquitectura Rest.
¿Para que sirve una Rest API?
Existe una gran variación en las formas en que se utilizan los API. Las redes sociales, por ejemplo,
proporcionan un API que se puede utilizar en otros sitios para recuperar información de una página.
Existen varios plugins de WordPress que acceden a las redes sociales a través de ellos y transforman el
resultado de esta interacción en pequeñas visualizaciones del estado actual de la página
correspondiente.
Así, si un usuario quiere darle like a la página, por ejemplo, no es necesario que abandone el sitio
original para esta acción.
Al hacer clic en el botón Me Gusta, hay una llamada al API para completar esta operación. Para que eso
sea posible, las redes sociales proporcionan un token con la debida autorización para que API tenga
acceso a la información.
Al igual que las redes sociales, los APIs también se utilizan en los sitios de ecommerce para acceder a
los intermediarios de pago y completar las transacciones de compra.
Por lo tanto, el API sirve para comunicarse entre aplicaciones para intercambiar
informaciones de forma rápida y segura.
Ventajas de las Rest API
Separación entre cliente y servidor
Una de las ventajas de utilizar el modelo API Rest es la separación entre las aplicaciones de front-end y back-
end.
Esto es importante para proteger el almacenamiento de datos, ya que no existe un tratamiento de las reglas
comerciales, es decir, solo se intercambia informaciones sea para recuperar datos, o para insertar o eliminar
nuevos registros.
Más visibilidad, confiabilidad y escalabilidad
Debido a la separación cliente / servidor, hay mucha más facilidad durante el desarrollo de la aplicación. Esto
se debe a que se puede escalar fácilmente, ya que no hay dificultad para vincular recursos.
Como cada solicitud se realiza de forma única e independiente, es posible cambiar una solicitud a otro DNS,
sin interferir con la aplicación.
En otras palabras, una API Rest permite que la aplicación acceda a bases de datos desde diferentes
servidores, lo que a menudo es importante para el desarrollo en aplicaciones grandes. Por lo tanto, su uso
garantiza una mayor visibilidad y credibilidad a la hora de utilizar estos recursos.
Ventajas de las Rest API
Multiplataforma
Las requisiciones HTTP realizadas en API Rest devuelven datos en formato JSON. Cabe mencionar
que existen otros posibles formatos de retorno, como XML, sin embargo, JSON es el más utilizado.
Por lo tanto, la mayoría de los sitios que trabajan con este modelo reciben este formato de datos.
Esta característica es fundamental para el desarrollo de aplicaciones multiplataforma. Eso se debe
a que, al recibir los datos en este formato, la camada front-end de la aplicación es capaz de
realizar el tratamiento adecuado para mostrar los resultados según el tipo de dispositivo utilizado.
El uso de Rest API es importante para agregar varias funciones al sitio. Sus características
permiten la integración con diferentes aplicaciones; entre ellos, redes sociales y sistemas de pago.
Por eso, es una tecnología que garantiza una mayor fiabilidad y escalabilidad, además de facilitar
el desarrollo de aplicaciones multiplataforma.
Ventajas de las Rest API
Multiplataforma
Las requisiciones HTTP realizadas en API Rest devuelven datos en formato JSON. Cabe mencionar
que existen otros posibles formatos de retorno, como XML, sin embargo, JSON es el más utilizado.
Por lo tanto, la mayoría de los sitios que trabajan con este modelo reciben este formato de datos.
Esta característica es fundamental para el desarrollo de aplicaciones multiplataforma. Eso se debe
a que, al recibir los datos en este formato, la camada front-end de la aplicación es capaz de
realizar el tratamiento adecuado para mostrar los resultados según el tipo de dispositivo utilizado.
El uso de Rest API es importante para agregar varias funciones al sitio. Sus características
permiten la integración con diferentes aplicaciones; entre ellos, redes sociales y sistemas de pago.
Por eso, es una tecnología que garantiza una mayor fiabilidad y escalabilidad, además de facilitar
el desarrollo de aplicaciones multiplataforma.
Endpoints - Definición
Los endpoints son URLs acompañadas de un verbo HTTP que
apuntan a una función que se ejecuta en el backend.
Al llamar esa función (conocida como API) se obtiene una
respuesta según el protocolo HTTP.
Cuando se llaman estos enpoints (usando un cliente http como el
navegador o librerías desde el cliente) se puede enviar datos
capturados desde formularios, que posteriormente pueden ser
almacenados en una base de datos.
Endpoints Envía usuario y contraseña
Recibe las credenciales y autentica al
usuario si existe en la base de datos

http://server.com/users/login

El endpoint es la forma que tiene el cliente para comunicarse


con un servidor. La URL apunta a una función en un servidor
específico
Modelo Vista Controlador (MVC)
Es un estilo de arquitectura de software que separa los datos de una aplicación, la
interfaz de usuario, y la lógica de control en tres componentes distintos.
Se trata de un modelo muy maduro y que ha demostrado su validez a lo largo de
los años en todo tipo de aplicaciones, y sobre multitud de lenguajes y plataformas
de desarrollo.
• El Modelo que contiene una representación de los datos que maneja el sistema
y sus mecanismos de persistencia.
• La Vista, o interfaz de usuario, que compone la información que se envía al
cliente y los mecanismos interacción con éste.
• El Controlador, que actúa como intermediario entre el Modelo y la Vista,
gestionando el flujo de información entre ellos y da respuesta al cliente.

También podría gustarte