Bootcamp Backend Lemoncode

Nos arrancamos con la primera edición de nuestro Bootcamp Backend Lemoncode una formación que te permitirá ponerte al día en dos stacks:

  • Nodejs + Documental, un stack más novedoso en el que aprenderás lenguajes y tecnologías tales como: JavaScript, TypeScript, nodejs, Express, GraphQL, Jest, MongoDb…

  • .net Framework + Sql Server, un stack muy asentado en el mercado, del que aprenderás lenguajes y tecnologías tales como: C#, .net6, Entity Framework, SignalR, SQL Server…

Todo ello sin dejar de lado la parte de fundamentos: modelado de datos, principios de APIs REST, pruebas unitarias, seguridad…

En este post podrás encontrar el temario del Bootcamp en más detalle.

Temario

Stack nodejs + documental

En la primera parte de este módulo definiremos que es una base de datos documental, qué usos tiene y que diferencias tiene con otros modelos más rígidos.

En la segunda aprenderemos a como partiendo de requerimientos de un cliente, como podemos diseñar el esquema de nuestra base de datos, siguiendo diferentes patrones, teniendo en cuenta factores tales como normalizar vs denormalizar nuestro esquema, como manejar la cardinalidad, optimizar la manipulación de datos...

Un resumen:

  • Conceptos MongoDB.

  • Proceso de modelado.

  • Analizando una aplicación, carga de trabajo, consultas críticas.

  • Estableciendo relaciones link vs embedding.

  • Patrones:

    • Cómo aplicarlos.

    • Subset pattern.

    • Computed pattern.

    • Attribute pattern.

    • Extended ref.

    • Schema versioning pattern.

    • Bucket pattern.

    • Tree patterns.

    • Polymorphic pattern.

    • Approximation pattern.

    • Outlier pattern.

Trabajando con MongoDB

Existen muchos motores de Base de datos documentales, para este Bootcamp Backend tomamos MongoDB como motor de referencia, por su aceptación y tiempo en el mercado.

En este módulo arrancaremos estudiando las características de Mongo a nivel de infraestructura y diseño, y por qué lo hacen una Base de datos preparada para escalar y poder recibir fuertes cargas de tráfico.

Una vez completada la parte de infraestructura, nos pondremos manos a la obra practicando:

  • Estudiaremos los tipos básicos que ofrece.

  • Como manejarnos con el shell.

  • Como crear, actualizar y borrar documentos.

  • Como hacer consultas.

  • Como trabajar con Aggregations.

  • Como crear índices.

Introducción a ES6/TypeScript

Nodejs nos permite poder trabajar con versiones modernas de JavaScript así como con ciertas ayudas externas poder transpilar TypeScript, esto nos permite crear bases de código más robustas y mantenibles.

En este módulo aprenderemos a crear un setup que nos permita trabajar con TypeScript, también aprenderemos los conceptos nuevos que introduce ES6 y cómo sacarle el máximo partido al tipado en TypeScript.

Un resumen:

  • Javascript:

    • Javascript ES5 y ES6

    • Sintaxis básica.

    • const / let / var y hoisting.

    • Closure.

    • Manejo del this.

    • Arrow functions.

    • Backticks.

    • Spread operator.

    • Destructuring.

    • Property value short hand.

    • Curry.

    • JS array functions:

      • Map

      • Reduce

      • Filter

      • Find / findIndex

      • Some

  • TypeScript:

    • Conceptos

    • Typing implícito.

    • Tipando una función.

    • Interfaces

    • KeyOf.

    • Genéricos

  • Configurando soporte a TypeScript en un proyecto nodejs.

Principios API's REST

Las API's Rest nos permiten acceder a datos de una manera uniforme, definiendo una serie de verbos estándares y una definición de URLs por recurso. En este módulo aprenderemos estos conceptos y tomaremos como servidor de referencia Express.

Que cubriremos:

  • Conceptos API Rest.

  • Verbos principales.

  • Introducción Express.

  • Implementación CRUD.

  • Manejo de CORS.

Estructurando un proyecto

Una vez que ya sabemos implementar las operaciones básicas, toca enfrentarnos a un proyecto real, ¿Cómo podemos estructurarlo de cara a que mantenga su mantenibilidad a lo largo del tiempo? En este módulo aprenderemos diversas técnicas así como buenas prácticas.

Un resumen:

  • Beneficios de una estructura adecuada al proyecto.

  • Presentación de diferentes arquitecturas.

  • Ventajas e inconvenientes de cada una de ellas.

  • Estructurando una aplicación.

  • Como estructurar la aplicación utilizando datos mocks para en un futuro añadir la implementación real de base de datos.

Mongoose + Acceso a datos

En este módulo arrancaremos interactuando con una base de datos de forma directa, veremos las ventajas y desventajas que ofrece esta aproximación.

En la segunda parte del módulo introducimos el concepto de ODM (Object Document Mapper), y trabajaremos con Mongoose.

Como punto final simularemos la implementación de una API Rest real atacando directamente a MongoDB y otra implementando el acceso a datos con Mongoose.

Pruebas Unitarias

Que un desarrollo que realicemos sea robusto es muy importante, en este módulo veremos una introducción al concepto de pruebas unitarias, mocking, TDD, BDD...

Como librería de pruebas unitarias utilizaremos Jest.

Autenticación / Autorización

Cuando creamos una API Rest, podemos tener end points de acceso restringido, nos hace falta tanto identificar al usuario que va a usar la aplicación, así como chequear qué roles tiene y a qué

información u operaciones debe tener acceso.

En este módulo cubrimos conceptos básicos como que son las cookies, headers, manejo de tokens de session, tokens opacos y transparentes (JWT).

Aprenderemos a como manejar esta seguridad vía middlewares de Express, y consideraciones a tener en cuenta de seguridad.

GraphQL

GraphQL se está convirtiendo en el nuevo estándar llamado a sustituir a REST API.

En este módulo veremos que ventajas aporta respecto a REST API, trabajando con varios ejemplos.

Socket.io

Poder tener tiempo real o comunicación bidireccional entre cliente y servidor, es un tema crítico en ciertos proyectos.

En este módulo comentaremos las limitaciones de HTTP y como la tecnología de Web Sockets nos permite cubrir ciertos escenario avanzados.

Como librería de implementación utilizaremos Socket.io

Despliegue en la nube

La nube se ha convertido en un estándar de facto a la hora de salir a producción, nos permite quitarnos quebraderos de cabeza a la hora de manejar "hierro" o infraestructuras a bajo nivel.

En este módulo aprenderemos a subir nuestros proyectos tanto de manera manual, como automatizada (CI/CD), y utilizando tecnología de contenedores (Docker).

Las proveedores de cloud que vamos a cubrir son AWS y Heroku.

Almacenando recursos en la nube

Cuando interactuamos con un cliente no sólo trabajamos con datos en formato JSON, también necesitamos almacenar datos tales como por ejemplo: un fichero escaneado de cierta documentación, fotos, o videos.

En este módulo veremos como utilizar soluciones en la nube para almacenar y compartir estos recursos, haremos uso de AWS S3.

Loggings y métricas

Es importante que cuando tengamos nuestra aplicación desplegada en un servidor, podamos obtener información detallada de cualquier fallo para poder resolverlo, también es muy importante poder estudiar métricas de uso, para detectar de manera temprana cuellos de botella y poder escalar a tiempo la pieza necesaria de nuestra solución.

En este módulo estudiaremos herramientas tales como Rollbar o New Relic y como integrarlas en nuestros proyectos.

Demonios y colas

Ofrecer una API Rest y dar respuesta en tiempo real a peticiones, no cubre todas las necesidades de un negocio, por un lado hay tareas que pueden llevar un tiempo considerable de ejecución, o también entradas que pueden tener una carga de tráfico considerable y prefieres añadirlas a una lista de ejecución para que no colapse tu servidor.

Otra área a tener en cuenta es la de tener procesos que se levantan cada X tiempo para realizar operaciones de mantenimiento.

Una forma de gestionar estos desafíos es mediante el uso de demonios y colas.

Stack .net + relacional

Modelado

En la primera parte de este módulo definiremos que es una base de datos relacional, que usos tiene y que diferencias tiene con modelos documentales.

En la segunda aprenderemos a como partiendo de requerimientos de un cliente como podemos diseñar el esquema de nuestra base de datos, cubriremos conceptos terminología (tupla, atributo, grado, cardinalidad, dominio...),

tipos de clave, reglas de CODD, esquemas entidad relación a relacional, todo ello siguiendo un enfoque práctico.

Realizaremos varios ejercicios en los que cubriremos casos prácticos

Trabajando con SQL Server

SQL Server es una base de datos desarrollado por Microsoft, que está disponible tanto en S.O. Windows cómo en Linux.

Está base de datos es muy popular entre los desarrolladores que trabajan con stack .net

En este módulo veremos:

  • Como instalarlo.

  • Como funcionan las herramientas básicas de administración.

  • Como crear una base de datos desde el UI.

  • Una introduccíon a SQL y T-SQL.

  • Como crear vistas, triggers...

C#

C# es una lenguaje de programación creado por Microsoft en el año 2000, lleva más de 20 años en activo, y va por su versión 8.0.

En este módulo nos familiarizaremos con la sintaxis de éste, cubriremos conceptos básicos de programación orientada a objetos, y revisaremos las características más importantes de .net Framework.

  • Sintaxis:

    • Variables, constantes, enumerados.

    • Métodos

    • Control de flujo

    • Colecciones

    • Programación genérica

    • Expresiones regulares

    • Delegados, predicados y Lambdas

  • Manejo de Excepciones:

  • POO:

    • Conceptos

    • Herencia

    • Interfaces

  • LINQ

Creando un proyecto de API Rest + Swagger

En este módulo, aprovechamos que ya hemos adquirido previamente los conceptos teóricos de API's Rest (en el área de nodejs), y nos centraremos en cómo implementar API's Rest con .net Framework tomando como ejemplos casos prácticos.

Otro punto importante que cubriremos es la de definir los contratos de nuestra API Rest utilizando open api / swagger.

Entity Framework

En este módulo arrancaremos interactuando con una base de datos de forma directa, veremos las ventajas y desventajas que ofrece esta aproximación.

En la segunda parte del módulo introducimos el concepto de ORM (Object Relational Mapper), y trabajaremos con Entity Framework.

Como punto final simularemos la implementación de una API Rest real atacando directamente a SQL Server y otra implementando el acceso a datos con Entity Framework.

Pruebas Unitarias

Que un desarrollo que realicemos sea robusto es muy importante, en este módulo veremos una introducción al concepto de pruebas unitarias, mocking, TDD, BDD...

Aquí utilizaremos las capacidades de testing que nos ofrece .net framework, así como librerías externas de Mocking como Moq.

Autenticación / Autorización

Cuando creamos una API Rest, podemos tener end points de acceso restringido, nos hace falta tanto identificar a un usuario, así como chequear que roles tiene y a qué información o operaciones debe tener acceso.

En este módulo cubrimos conceptos básicos como que son las cookies, headers, manejo de tokens de sesión, tokens opacos y transparentes (JWT).

Aprenderemos a como manejar esta seguridad vía middlewares, y consideraciones a tener en cuenta de seguridad.

SignalR

Poder tener tiempo real o comunicación bidireccional entre cliente y servidor, es un tema crítico en ciertos proyectos.

En este módulo aprenderemos a usar la librería SignalR.

Despliegue en la nube

La nube se ha convertido en un estándar de facto a la hora de salir a producción, nos permite quitarnos quebraderos de cabeza a la hora de manejar "hierro" o infraestructuras a bajo nivel.

En este módulo trabajaremos con el proveedor de nube de Microsoft: Azure.

Almacenando recursos en la nube

Cuando interactuamos con un cliente no sólo trabajamos con datos en formato JSON, también necesitamos almacenar datos tales como por ejemplo: un escaneo cierta documentación, fotos, o videos.

En este módulo veremos como utilizar soluciones en la nube para almacenar y compartir estos recursos, en este caso haremos uso de Azure Storage.

Loggings y métricas

Es importante que cuando tengamos nuestra aplicación desplegada en un servidor, poder tener información detallada de cualquier fallo para poder resolverlo, también es muy importante poder estudiar métricas de uso, para detectar de manera temprana cuellos de botella y poder escalar a tiempo la pieza necesaria.

En este módulo integraremos la instrumentación que ofrece Azure App Insights.

Demonios y colas

Una API Rest y dar respuesta en tiempo real no cubre todas las necesidades de un negocio, por un lado hay tareas que pueden llevar un tiempo considerable de ejecución, o también entradas que pueden tener una carga de tráfico considerable y prefieres añadirlas a una lista de ejecución para que no colapse tu servidor.

Otra area a tener en cuenta es la de tener procesos que se levantan cada X tiempo para realizar operaciones de mantenimiento.

Una forma de gestionar estos desafíos es mediante el uso de demonios y colas.

En este modulo trabajaremos con Azure Worker Roles.

¿Te apuntas?

En la página de nuestro Bootcamp encontrarás mas información de fechas, precios y plazos, también te podrás poner en contacto con nosotros escribiendo un email a info@lemoncode.net