Saber construir una API (REST o GRAPHQL) conectada a una BBDD (Relacional o NoSQL) y puesta en producción.
JavaScript - ES6 --> TypeScript (superset JavaScript) | php
Diseño de BBDD (Modelos de Entidad-Relación), SQL, SGBDR (MySQL o PostGreSQL) y NoSQL(MongoDB)
Testing (Unit Testing), CI/CD (Jenkins, Circle, Travis), Contenedores Docker
Slack --> Comunicación del equipo GitHub --> Compartir ejercicios y Git (Gestión Versiones) IDE --> VisualStudioCode (VSCode)
http://bcncodes-academy-lessons.web.app http://github.com/curso-backend-web
Instalamos VSCode, Node.js (instalamos vía nvm), git
- holaMundo.js
- servidorHttp.js
- utilizamos el terminal para lanzar comandos.
Testing -- Fundamentos Ejercicio de testing con validación de Password.
Pasó el tiempo..... #############################################
APIRest con authentication 0. Planficamos lo que queremos hacer. Aquí se hace un kanban con todas las tareas
-
Arquitectura: Crear los directorios y ficheros principales |_ Controller |_ Model |_ Routes |_ app.js |_ server.js
-
configurar app.js
- Montamos los handlers de cada ruta
- Añadimos los middlewares de terceros...P.ej: express.json()
- exportamos app y lo importamos en server.js
- Empezamos a construir por ruta:
- Routes: construir el router de la ruta
- subrutas y métodos asociados a controllers. Método a método.
- Controller: crear el controlador asociado al método.
- procesamiento de la request.
- pedir los datos al model.
- devolver la respuesta.
- Model: creamos el método de la clase que recupera los datos. (si fuera necesario se crea directorio data con los datos)
- SE PRUEBA mediante cliente REST.
- Incorporamos middleware. Incorporar los middleware de autenticación y gestión de errores requiere modificar los controladores añadiendo el parámetro next.
- Middleware de errores
- Middleware de auth...
- Otras funcionalidades: ...temas de seguridad, temas caché, temas de cors...
Las bbdd están dentro de los SGBD (RDMS). Un software que gestiona los datos, el acceso a los datos, la seguridad de los datos, el rendimiento.
Las bbdd relacionales: almacena datos relacionados entre si, con una estructura en tablas con filas y columnas. Las bbdd noSQL no utilizan sql para explotar los datos: documentos, clave-valor, texto, ...
- Físico: el almacenamiento de los datos,
- Lógico: modelo de relación de los datos almacenados
- Conceptual: traducción del mundo real al mundo conceptos, base para el modelo lógico.
El modelo conceptual Se genera un diagrama E/R (entidad-relación)
- Entidades, relaciones y atributos
-Entdades: Los objetos de la vida real que queremos modelar. Sustantivos de las frases que recogemos de los requerimientos. -Relaciones: serían los verbos de las frases. -Palabras tales como mucho, al menos, solo uno,... cardinalidad
Traducir o trasladar el modelo conceptual al modelo lógico-relacional.
-> SQL embebido en el código. -> ORM para comunicarnos en la bbdd.
SQL
qué queremos obtener: SELECT tabla1.columna1, funcion(tabla2.column2),... de dónde: FROM tabla1, tabla2, (select otracosa from otra tabla where condicion) con qué condiciones: WHERE tabla1.columna1 like 'F%' otras cláusulas: información agrupada con GROUP BY, ordenada con ORDER BY, últimas condiciones con HAVING
Consultas de combinaciones de varias tablas. JOINS SELECT t1.nom_col1, t2.nom_col2 from table1 t1, table2 t2 where t1.id = t2.id; SELECT t1.nom_col1, t2.nom_col2 from table1 t1 JOIN t2 ON t1.id = t2.id; from table1 t1 JOIN t2 USING (id);
-INNER-JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, EQUI-JOIN, NON-EQUI-JOIN, FULL-JOIN, CROSS-JOIN, NATURAL-JOIN
UNION select 1 UNION select 2
SUBQUERIES
- Aggregated
- Correlated
referencia: https://mysqltutorial.org
- De la idea al papel:
- Identificación de entidades, relaciones, atributos, restricciones, etc.
- Diseño del modelo lógico-relacional: Pintamos tablas con PK, FK y relaciones.
- Generamos scripts de tablas.
- Preparamos los datos de partida para ser cargados: json, csv, xml, ... Y se cargan en tablas de preparación.
- Preparamos los scripts de carga en las tablas definitivas. Para ello tenemos que relacionar las tablas de preparacións con las tablas que vamos generando con los id definitivos.
- Diseño e implementación del resto de artefactos de la bbdd (procedures, triggers, funciones, índices, etc.)
-
Las aplicaciones se conectan a las bbdd mediante drivers, puente de conexión entre ambos sistemas. Estos drivers son programas que implementan el estándar ODBC, entre otros. Dependiendo del lenguaje de programación usaremos un driver en ese lenguaje.
-
Con MySQL usamos la librería mysql2 que complementa a la librería mysql.
- Instalación:
npm i mysql2
- configuración de la conexión:
db = {
hostname:'',
database:'',
user:'',
password:''
}
mysql.createConnection(db);
- Lanzamos las queries con el comando:
mysql.query();
mysql.execute(sql,params);
- Preparación los modelos
- Uno por objeto o funcionalidad.
Tasks:
- register -- llamar al proc insert user
- login -- llamar a la función check_user
- getAllMovies -- select * // sustituir el * por los nombres de cols
- getMovieById -- select con condición where
- setMovie -- insert one movie
- updateMovie -- update con condición where
- deleteMovie -- delete con condición where
- getAllUsers -- select where
- deleteUser -- delete user condición where
USUARIO de acceso: escritura, lectura, ejecución sobre las tablas de la db. sin permisos de ddl: eliminar tablas, alter tablas,
BBDD NoSQL
- flexibles: schemaless
- BASE: soft consistency, basic disponibility.
Cómo elegir entre relacional o no relacional:
- consistencia de los datos vs rapidez
MongoDB es una bbdd noSQL orientada a documentos
Los registros se guardan en documentos de tipo BSON (JSON binario) Los documentos se agrupan en colecciones Las colecciones en bases de datos
Estructura:
{
_id: ObjectID(),
name: string,
age: number -- int32, int64, double, decimal,...
address:{
street: string,
num: number,
},
hobbies: [one, two, three]
}
Arquitectura de un servidor mongodb:
- server: mongod
- cliente: mongosh (mongoshell)
- compass
Mongodb en el cloud: MongoAtlas
Para insertar datos: utilizamos mongoimport:
```bash
mongoimport --db test --collection micoleccion --file datos.json
Comandos:
//Ver db
show dbs
//crear y o seleccionar una db
use test
//ver colecciones
show collections
//ver datos de una coleccion
db.micoleccion.find({});
# Día 1 M3 - TypeScript
Superset de JavaScript - Extiende JavaScript con TIPADO de datos, POO, Modulos ESNext, etc.
TypeScript:
- Lenguaje,
- Compilador que convierte a JavaScript
- Linting -- Checkeo de errores en tiempo de desarrollo
Cómo se tipa en TS:
const variable:<<tipo>> = VALOR;
Tipos básicos: string, number, boolean, Array, etc.
Otros tipos básicos: any, unknown, never
Tipos complejos:
- Customizados: type Nombres = 'Pepe' | 'Sara' --literales
type Edad = string | number
- Interface: interface Persona{
nombre: string;
edad: number;
address: Address;
}