SlideShare una empresa de Scribd logo
1 de 55
Backends en Node
para Javeros y
Puntoneteros
Francisco Javier Barrena Castillo - @DogDeveloper
Who’s that guy
Francisco Javier Barrena Castillo - @DogDeveloper
• Director de Innovación en Ingeniería del Software en
Instituto Tecnológico de Informática @ITI_TIC
• 7 años con proyectos comerciales
• Actualmente en proyectos de I+D
• Big Data, Machine Learning, Cloud Computing, Cyber Physical
Systems, Embedded Systems…
• Ex-CTO en www.onlyeco.com
• Buscador de viajes ecosostenibles
• Actualmente EcoDeveloper Advocate
• Formador y ponente (¡cuando me dejan! :D)
https://www.linkedin.com/in/fjbarrena
¿qué hace esto?
Francisco Javier Barrena Castillo - @DogDeveloper
¿y esto?
Francisco Javier Barrena Castillo - @DogDeveloper
¿o esto?
Francisco Javier Barrena Castillo - @DogDeveloper
Y esto otro…
http://codepen.io/MattiaAstorino/pen/zxRayG
Francisco Javier Barrena Castillo - @DogDeveloper
Y es que al ecosistema node le falta un ‘hervor’
• Node es una tecnología habilitadora
• La comunidad se dio pronto cuenta de que Node aportaba cosas nuevas
• Pero le faltan (¿faltaban?) años para conseguir el nivel de madurez de su
competencia
• ¿Dónde triunfó inicialmente Node?
• En prototipado rápido
• Los frameworks que surgieron mejoraron las cosas, pero seguían estando
demasiado cerca del ‘hierro’
• Express, Loopback, Sails
• Ninguno resolvía los grandes problemas…
Francisco Javier Barrena Castillo - @DogDeveloper
Y es que al ecosistema node le falta un ‘hervor’
• Node es una tecnología habilitadora
• La comunidad se dio pronto cuenta de que Node aportaba cosas nuevas
• Pero le faltan (¿faltaban?) años para conseguir el nivel de madurez de su
competencia
• ¿Dónde triunfó inicialmente Node?
• En prototipado rápido
• Los frameworks que surgieron mejoraron las cosas, pero seguían estando
demasiado cerca del ‘hierro’
• Express, Loopback, Sails
• Ninguno resolvía los grandes problemas…
Francisco Javier Barrena Castillo - @DogDeveloper
Francisco Javier Barrena Castillo - @DogDeveloper
La arquitectura
Las ideas preconcebidas
Francisco Javier Barrena Castillo - @DogDeveloper
La estabilidad
Nest – una solución posible
• Nest es un framework de desarrollo en TypeScript con todo lo que nos
gusta
• ORMs
• ‘Razonablemente’ tipado
• Guiado por anotaciones
• Orientado a
• Objetos
• Funcional
• Reactiva
• Modular
• Testeable
• Dependency Injection
Francisco Javier Barrena Castillo - @DogDeveloper
El artífice
@kammysliwiec@nestframework
Nest – una solución posible
• Está construido sobre Express
• Eso nos permite usar cualquier librería existente para Express
• Se centra en la arquitectura
• Que implementa buenos patrones de diseño
• Con una comunidad creciente
• Y nacido en libertad
Francisco Javier Barrena Castillo - @DogDeveloper
La libertad
PERSON
Francisco Javier Barrena Castillo - @DogDeveloper
El origen del poder
•La industria es poderosa
•Pero no es el origen del poder
•El origen del poder es de los developers
•La industria tiene el dinero
•Nosotros y nosotras tenemos todo lo demás
•Loopback, Sails, Meteor o quien venga no son nadie
sin nuestra aprobación
Francisco Javier Barrena Castillo - @DogDeveloper
Si los developers estornudamos…
• Si los developers estornudamos, la industria se resfría
• Y los developers teníamos un problema…
• Los frameworks de back-end en Node no fomentaban la mantenibilidad del código
• Ni la arquitectura
• Y aquellos que se acercaban, nos intentaban atrapar anclándonos a sus modelos de
funcionamiento
• Así que empezamos a buscar alternativas basadas en estándares
• La solución es siempre tender a los estándares
• Y ha surgido Nest, que permite a la comunidad desarrollar backends
basados en Node bien estructurados, basados en estándares y buenas
prácticas.
• Tanto es así, que algunos players han empezado a copiar a Nest
Francisco Javier Barrena Castillo - @DogDeveloper
Breve introducción a nest
• Fuertemente influenciado por Angular
• Async by default
• Basado en módulos
• Inyección de dependencias (por constructor o a través de anotaciones)
• Fácilmente integrable con
• TypeORM
• Passport
• Mongoose
• GraphQL
• Websockets
• Microservices (Redis, MQTT, RabbitMQ…)
• Swagger
Francisco Javier Barrena Castillo - @DogDeveloper
Conceptos importantes
• Modules
• Equivalente a los packages de JAVA o a los namespaces de .NET
• Providers
• Servicios y DAOs. Equivalente a @Repository o a @Service en Spring
• Controllers
• Clase que maneja los endpoints, equivalente a JAX-RS en JAVA por ejemplo
• Guards
• Permiten aplicar reglas de seguridad a endpoints
• Interceptors
• Similar a Aspect Oriented Programming (AOP)
Francisco Javier Barrena Castillo - @DogDeveloper
Provider
Francisco Javier Barrena Castillo - @DogDeveloper
controller
Francisco Javier Barrena Castillo - @DogDeveloper
module
Francisco Javier Barrena Castillo - @DogDeveloper
Servicios
Daos
importación de módulos de terceros
endpoints
Siguenelpatrónsingleton
Arranque del servidor – main.ts
• Quien ‘orquesta’ el startup del servidor es el fichero main.ts
• Esto es genial porque:
• Podemos hacer cosas antes de que arranque el servidor
• Y también después
• Pero sobre todo, nos facilita enormemente tareas como:
• Integración con Dockers
• Despliegues en Kubernetes, etc.
• Procesos de Integración Contínua
• Un main.ts básico podría ser el siguiente
Francisco Javier Barrena Castillo - @DogDeveloper
Main.ts
Francisco Javier Barrena Castillo - @DogDeveloper
Y a partir de ahí…
Francisco Javier Barrena Castillo - @DogDeveloper
Feel like a mage…
12 de junio de 2018 www.vlcsofting.es
Nestcli – scaffolding
Los genéricos
• Algo muy interesante es el uso de genéricos
• Al estar basado enTypeScript, podemos utilizar toda la potencia de un
lenguaje orientado a objetos
• Podemos implementar controladores base, de los que extenderán los
controladores finales, con muy poco código
Francisco Javier Barrena Castillo - @DogDeveloper
Para los javeros: un dao genérico
Francisco Javier Barrena Castillo - @DogDeveloper
Para los javeros: un dao genérico
Francisco Javier Barrena Castillo - @DogDeveloper
Para los javeros: un dao genérico
Francisco Javier Barrena Castillo - @DogDeveloper
Para los javeros: un dao genérico
Francisco Javier Barrena Castillo - @DogDeveloper
Y ahora la clase que lo extiende
Francisco Javier Barrena Castillo - @DogDeveloper
Feel like a mage…
12 de junio de 2018 www.vlcsofting.es
Feel like a mage…
12 de junio de 2018 www.vlcsofting.es
¿qué acabamos de hacer?
controller
Francisco Javier Barrena Castillo - @DogDeveloper
“The good monolith”
• Los monolitos que nos complicaron la vida eran aquellos que acoplaban
backend de frontend
• Aprendimos que para escalar horizontalmente estas construcciones no eran
buenas
• Empezamos a separar y a desacoplar. Inicialmente, solo backend de
frontend
• Luego empezamos a partir al backend en trozos más pequeños
• Y más pequeños. En microservicios.
• Hasta que empezamos a tener decenas de microservicios
• Y empezaron a complicarnos la vida también
Francisco Javier Barrena Castillo - @DogDeveloper
Arquitectura promovida por la comunidad
Francisco Javier Barrena Castillo - @DogDeveloper
Módulo 1
(Auth)
Service
Controll
Model
Módulo 2
(Artículos)
Service
Controll
Model
Módulo 3
(Transactions)
Service
Controll
Model
Módulo N
(Clientes)
Service
Controll
Model
Módulo principal
El microlito
Francisco Javier Barrena Castillo - @DogDeveloper
PersistenceModule
(TypeORM,
Providers/DAO)
SharedModule
(CommonsyModelo)
CoreModule
(Providers/Service,
Negocio)
APIModule
(Controllers,
Middleware, Auth)
App Module
(Bootstrap y Config)
Módulo
reutilizable
Módulo
reutilizable
KAFKA
MODULE
WINSTON
LOGGER MODULE
DOMINIO
Módulo
reutilizable
AMAZON S3
MODULE
Módulo
reutilizable
FACEBOOK AUTH
MODULE
HTTP SERVICE
El “microservicio”
Francisco Javier Barrena Castillo - @DogDeveloper
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
FRONT
USUARIOS PEDIDOS ARTÍCULOS PRECIOS
HTTP SERVICE
El “microservicio”
Francisco Javier Barrena Castillo - @DogDeveloper
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
FRONT
USUARIOS PEDIDOS ARTÍCULOS PRECIOS
i+d en el iti
Francisco Javier Barrena Castillo - @DogDeveloper
HTTP SERVICE
True microservice
Francisco Javier Barrena Castillo - @DogDeveloper
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
Módulo
Service
Controll
Model
FRONT
USUARIOS PEDIDOS ARTÍCULOS PRECIOS
Francisco Javier Barrena Castillo - @DogDeveloper
Gracias
i+d en el iti
Francisco Javier Barrena Castillo - @DogDeveloper

Más contenido relacionado

La actualidad más candente

Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScriptAhmed El-Kady
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean ArchitectureMattia Battiston
 
Routing & Navigating Pages in Angular 2
Routing & Navigating Pages in Angular 2Routing & Navigating Pages in Angular 2
Routing & Navigating Pages in Angular 2Knoldus Inc.
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationRichard North
 
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management SystemsAEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management SystemsMongoDB
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to SwaggerKnoldus Inc.
 
Angular Advanced Routing
Angular Advanced RoutingAngular Advanced Routing
Angular Advanced RoutingLaurent Duveau
 
Developing Faster with Swagger
Developing Faster with SwaggerDeveloping Faster with Swagger
Developing Faster with SwaggerTony Tam
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootMikalai Alimenkou
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java DevelopersYakov Fain
 
Solid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJSSolid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJSRafael Casuso Romate
 
Finally, easy integration testing with Testcontainers
Finally, easy integration testing with TestcontainersFinally, easy integration testing with Testcontainers
Finally, easy integration testing with TestcontainersRudy De Busscher
 
KubeVirt (Kubernetes and Cloud Native Toronto)
KubeVirt (Kubernetes and Cloud Native Toronto)KubeVirt (Kubernetes and Cloud Native Toronto)
KubeVirt (Kubernetes and Cloud Native Toronto)Stephen Gordon
 
Prowler: BlackHat Europe Arsenal 2018
Prowler: BlackHat Europe Arsenal 2018Prowler: BlackHat Europe Arsenal 2018
Prowler: BlackHat Europe Arsenal 2018Toni de la Fuente
 

La actualidad más candente (20)

NestJS
NestJSNestJS
NestJS
 
MongoDB and Node.js
MongoDB and Node.jsMongoDB and Node.js
MongoDB and Node.js
 
Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScript
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
Final terraform
Final terraformFinal terraform
Final terraform
 
What is Swagger?
What is Swagger?What is Swagger?
What is Swagger?
 
Routing & Navigating Pages in Angular 2
Routing & Navigating Pages in Angular 2Routing & Navigating Pages in Angular 2
Routing & Navigating Pages in Angular 2
 
Webpack slides
Webpack slidesWebpack slides
Webpack slides
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentation
 
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management SystemsAEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to Swagger
 
Angular Advanced Routing
Angular Advanced RoutingAngular Advanced Routing
Angular Advanced Routing
 
Developing Faster with Swagger
Developing Faster with SwaggerDeveloping Faster with Swagger
Developing Faster with Swagger
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java Developers
 
Hands on JSON
Hands on JSONHands on JSON
Hands on JSON
 
Solid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJSSolid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJS
 
Finally, easy integration testing with Testcontainers
Finally, easy integration testing with TestcontainersFinally, easy integration testing with Testcontainers
Finally, easy integration testing with Testcontainers
 
KubeVirt (Kubernetes and Cloud Native Toronto)
KubeVirt (Kubernetes and Cloud Native Toronto)KubeVirt (Kubernetes and Cloud Native Toronto)
KubeVirt (Kubernetes and Cloud Native Toronto)
 
Prowler: BlackHat Europe Arsenal 2018
Prowler: BlackHat Europe Arsenal 2018Prowler: BlackHat Europe Arsenal 2018
Prowler: BlackHat Europe Arsenal 2018
 

Similar a Backends en Node para Javeros y Puntoneteros

Aplicaciones Absurdamente Rápidas con Quarkus.io
Aplicaciones Absurdamente Rápidas con Quarkus.ioAplicaciones Absurdamente Rápidas con Quarkus.io
Aplicaciones Absurdamente Rápidas con Quarkus.ioFrancisco Javier Barrena
 
Webinar Codemotion 2020 - Piratas del Cloud
Webinar Codemotion 2020 - Piratas del CloudWebinar Codemotion 2020 - Piratas del Cloud
Webinar Codemotion 2020 - Piratas del CloudFrancisco Javier Barrena
 
Machine Learning ¿A TODO GAS? con GraalVM
Machine Learning ¿A TODO GAS? con GraalVMMachine Learning ¿A TODO GAS? con GraalVM
Machine Learning ¿A TODO GAS? con GraalVMFrancisco Javier Barrena
 
Deja de ser el rival más débil con DevSecOps
Deja de ser el rival más débil con DevSecOpsDeja de ser el rival más débil con DevSecOps
Deja de ser el rival más débil con DevSecOpsFrancisco Javier Barrena
 
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?Francisco Javier Barrena
 
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...Francisco Javier Barrena
 
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcidoTotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcidoFrancisco Javier Barrena
 
Re evolución robótica
Re evolución robóticaRe evolución robótica
Re evolución robóticaSoftware Guru
 
Cybercamp 2014. Tinfoleak: Analizando nuestras pautas y comportamientos a tr...
Cybercamp 2014. Tinfoleak:  Analizando nuestras pautas y comportamientos a tr...Cybercamp 2014. Tinfoleak:  Analizando nuestras pautas y comportamientos a tr...
Cybercamp 2014. Tinfoleak: Analizando nuestras pautas y comportamientos a tr...Internet Security Auditors
 
BancaCivica.es: Un caso de éxito Drupal en el sector bancario
BancaCivica.es: Un caso de éxito Drupal en el sector bancarioBancaCivica.es: Un caso de éxito Drupal en el sector bancario
BancaCivica.es: Un caso de éxito Drupal en el sector bancarioDavid Gil Sánchez
 
Top 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers SevillaTop 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers SevillaRamón Salado Lucena
 
Lado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxiLado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxiJosé Carlos García Serrano
 
Top 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers SevillaTop 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers SevillaJuan José Domenech
 
Codemotion 2021 - The Rustalorian: Este es el camino
Codemotion 2021 - The Rustalorian: Este es el caminoCodemotion 2021 - The Rustalorian: Este es el camino
Codemotion 2021 - The Rustalorian: Este es el caminoFrancisco Javier Barrena
 
Presentación omega peripherals
Presentación omega peripheralsPresentación omega peripherals
Presentación omega peripheralsOmega Peripherals
 
Buscadores
BuscadoresBuscadores
BuscadoresTensor
 

Similar a Backends en Node para Javeros y Puntoneteros (20)

Aplicaciones Absurdamente Rápidas con Quarkus.io
Aplicaciones Absurdamente Rápidas con Quarkus.ioAplicaciones Absurdamente Rápidas con Quarkus.io
Aplicaciones Absurdamente Rápidas con Quarkus.io
 
Webinar Codemotion 2020 - Piratas del Cloud
Webinar Codemotion 2020 - Piratas del CloudWebinar Codemotion 2020 - Piratas del Cloud
Webinar Codemotion 2020 - Piratas del Cloud
 
Machine Learning ¿A TODO GAS? con GraalVM
Machine Learning ¿A TODO GAS? con GraalVMMachine Learning ¿A TODO GAS? con GraalVM
Machine Learning ¿A TODO GAS? con GraalVM
 
Deja de ser el rival más débil con DevSecOps
Deja de ser el rival más débil con DevSecOpsDeja de ser el rival más débil con DevSecOps
Deja de ser el rival más débil con DevSecOps
 
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
 
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
 
Kubernetes - The Cloud King
Kubernetes - The Cloud KingKubernetes - The Cloud King
Kubernetes - The Cloud King
 
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcidoTotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
 
Re evolución robótica
Re evolución robóticaRe evolución robótica
Re evolución robótica
 
Cybercamp 2014. Tinfoleak: Analizando nuestras pautas y comportamientos a tr...
Cybercamp 2014. Tinfoleak:  Analizando nuestras pautas y comportamientos a tr...Cybercamp 2014. Tinfoleak:  Analizando nuestras pautas y comportamientos a tr...
Cybercamp 2014. Tinfoleak: Analizando nuestras pautas y comportamientos a tr...
 
BancaCivica.es: Un caso de éxito Drupal en el sector bancario
BancaCivica.es: Un caso de éxito Drupal en el sector bancarioBancaCivica.es: Un caso de éxito Drupal en el sector bancario
BancaCivica.es: Un caso de éxito Drupal en el sector bancario
 
Semana de la I+D - Proyecto OPOSSUM
Semana de la I+D - Proyecto OPOSSUMSemana de la I+D - Proyecto OPOSSUM
Semana de la I+D - Proyecto OPOSSUM
 
Top 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers SevillaTop 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers Sevilla
 
Lado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxiLado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxi
 
VozIPv6
VozIPv6VozIPv6
VozIPv6
 
Voz ipv6
Voz ipv6Voz ipv6
Voz ipv6
 
Top 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers SevillaTop 10 IoT OWASP, Hack&Beers Sevilla
Top 10 IoT OWASP, Hack&Beers Sevilla
 
Codemotion 2021 - The Rustalorian: Este es el camino
Codemotion 2021 - The Rustalorian: Este es el caminoCodemotion 2021 - The Rustalorian: Este es el camino
Codemotion 2021 - The Rustalorian: Este es el camino
 
Presentación omega peripherals
Presentación omega peripheralsPresentación omega peripherals
Presentación omega peripherals
 
Buscadores
BuscadoresBuscadores
Buscadores
 

Último

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (16)

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Backends en Node para Javeros y Puntoneteros

  • 1. Backends en Node para Javeros y Puntoneteros Francisco Javier Barrena Castillo - @DogDeveloper
  • 2. Who’s that guy Francisco Javier Barrena Castillo - @DogDeveloper • Director de Innovación en Ingeniería del Software en Instituto Tecnológico de Informática @ITI_TIC • 7 años con proyectos comerciales • Actualmente en proyectos de I+D • Big Data, Machine Learning, Cloud Computing, Cyber Physical Systems, Embedded Systems… • Ex-CTO en www.onlyeco.com • Buscador de viajes ecosostenibles • Actualmente EcoDeveloper Advocate • Formador y ponente (¡cuando me dejan! :D) https://www.linkedin.com/in/fjbarrena
  • 3.
  • 4.
  • 5. ¿qué hace esto? Francisco Javier Barrena Castillo - @DogDeveloper
  • 6. ¿y esto? Francisco Javier Barrena Castillo - @DogDeveloper
  • 7. ¿o esto? Francisco Javier Barrena Castillo - @DogDeveloper
  • 9.
  • 10. Francisco Javier Barrena Castillo - @DogDeveloper
  • 11. Y es que al ecosistema node le falta un ‘hervor’ • Node es una tecnología habilitadora • La comunidad se dio pronto cuenta de que Node aportaba cosas nuevas • Pero le faltan (¿faltaban?) años para conseguir el nivel de madurez de su competencia • ¿Dónde triunfó inicialmente Node? • En prototipado rápido • Los frameworks que surgieron mejoraron las cosas, pero seguían estando demasiado cerca del ‘hierro’ • Express, Loopback, Sails • Ninguno resolvía los grandes problemas… Francisco Javier Barrena Castillo - @DogDeveloper
  • 12.
  • 13. Y es que al ecosistema node le falta un ‘hervor’ • Node es una tecnología habilitadora • La comunidad se dio pronto cuenta de que Node aportaba cosas nuevas • Pero le faltan (¿faltaban?) años para conseguir el nivel de madurez de su competencia • ¿Dónde triunfó inicialmente Node? • En prototipado rápido • Los frameworks que surgieron mejoraron las cosas, pero seguían estando demasiado cerca del ‘hierro’ • Express, Loopback, Sails • Ninguno resolvía los grandes problemas… Francisco Javier Barrena Castillo - @DogDeveloper
  • 14. Francisco Javier Barrena Castillo - @DogDeveloper La arquitectura
  • 15. Las ideas preconcebidas Francisco Javier Barrena Castillo - @DogDeveloper
  • 17. Nest – una solución posible • Nest es un framework de desarrollo en TypeScript con todo lo que nos gusta • ORMs • ‘Razonablemente’ tipado • Guiado por anotaciones • Orientado a • Objetos • Funcional • Reactiva • Modular • Testeable • Dependency Injection Francisco Javier Barrena Castillo - @DogDeveloper
  • 19. Nest – una solución posible • Está construido sobre Express • Eso nos permite usar cualquier librería existente para Express • Se centra en la arquitectura • Que implementa buenos patrones de diseño • Con una comunidad creciente • Y nacido en libertad Francisco Javier Barrena Castillo - @DogDeveloper
  • 21. Francisco Javier Barrena Castillo - @DogDeveloper
  • 22. El origen del poder •La industria es poderosa •Pero no es el origen del poder •El origen del poder es de los developers •La industria tiene el dinero •Nosotros y nosotras tenemos todo lo demás •Loopback, Sails, Meteor o quien venga no son nadie sin nuestra aprobación Francisco Javier Barrena Castillo - @DogDeveloper
  • 23.
  • 24. Si los developers estornudamos… • Si los developers estornudamos, la industria se resfría • Y los developers teníamos un problema… • Los frameworks de back-end en Node no fomentaban la mantenibilidad del código • Ni la arquitectura • Y aquellos que se acercaban, nos intentaban atrapar anclándonos a sus modelos de funcionamiento • Así que empezamos a buscar alternativas basadas en estándares • La solución es siempre tender a los estándares • Y ha surgido Nest, que permite a la comunidad desarrollar backends basados en Node bien estructurados, basados en estándares y buenas prácticas. • Tanto es así, que algunos players han empezado a copiar a Nest Francisco Javier Barrena Castillo - @DogDeveloper
  • 25.
  • 26. Breve introducción a nest • Fuertemente influenciado por Angular • Async by default • Basado en módulos • Inyección de dependencias (por constructor o a través de anotaciones) • Fácilmente integrable con • TypeORM • Passport • Mongoose • GraphQL • Websockets • Microservices (Redis, MQTT, RabbitMQ…) • Swagger Francisco Javier Barrena Castillo - @DogDeveloper
  • 27. Conceptos importantes • Modules • Equivalente a los packages de JAVA o a los namespaces de .NET • Providers • Servicios y DAOs. Equivalente a @Repository o a @Service en Spring • Controllers • Clase que maneja los endpoints, equivalente a JAX-RS en JAVA por ejemplo • Guards • Permiten aplicar reglas de seguridad a endpoints • Interceptors • Similar a Aspect Oriented Programming (AOP) Francisco Javier Barrena Castillo - @DogDeveloper
  • 28. Provider Francisco Javier Barrena Castillo - @DogDeveloper
  • 29. controller Francisco Javier Barrena Castillo - @DogDeveloper
  • 30. module Francisco Javier Barrena Castillo - @DogDeveloper Servicios Daos importación de módulos de terceros endpoints Siguenelpatrónsingleton
  • 31. Arranque del servidor – main.ts • Quien ‘orquesta’ el startup del servidor es el fichero main.ts • Esto es genial porque: • Podemos hacer cosas antes de que arranque el servidor • Y también después • Pero sobre todo, nos facilita enormemente tareas como: • Integración con Dockers • Despliegues en Kubernetes, etc. • Procesos de Integración Contínua • Un main.ts básico podría ser el siguiente Francisco Javier Barrena Castillo - @DogDeveloper
  • 32. Main.ts Francisco Javier Barrena Castillo - @DogDeveloper
  • 33. Y a partir de ahí… Francisco Javier Barrena Castillo - @DogDeveloper
  • 34. Feel like a mage… 12 de junio de 2018 www.vlcsofting.es Nestcli – scaffolding
  • 35. Los genéricos • Algo muy interesante es el uso de genéricos • Al estar basado enTypeScript, podemos utilizar toda la potencia de un lenguaje orientado a objetos • Podemos implementar controladores base, de los que extenderán los controladores finales, con muy poco código Francisco Javier Barrena Castillo - @DogDeveloper
  • 36. Para los javeros: un dao genérico Francisco Javier Barrena Castillo - @DogDeveloper
  • 37. Para los javeros: un dao genérico Francisco Javier Barrena Castillo - @DogDeveloper
  • 38. Para los javeros: un dao genérico Francisco Javier Barrena Castillo - @DogDeveloper
  • 39. Para los javeros: un dao genérico Francisco Javier Barrena Castillo - @DogDeveloper
  • 40. Y ahora la clase que lo extiende Francisco Javier Barrena Castillo - @DogDeveloper
  • 41. Feel like a mage… 12 de junio de 2018 www.vlcsofting.es
  • 42. Feel like a mage… 12 de junio de 2018 www.vlcsofting.es
  • 44. controller Francisco Javier Barrena Castillo - @DogDeveloper
  • 45. “The good monolith” • Los monolitos que nos complicaron la vida eran aquellos que acoplaban backend de frontend • Aprendimos que para escalar horizontalmente estas construcciones no eran buenas • Empezamos a separar y a desacoplar. Inicialmente, solo backend de frontend • Luego empezamos a partir al backend en trozos más pequeños • Y más pequeños. En microservicios. • Hasta que empezamos a tener decenas de microservicios • Y empezaron a complicarnos la vida también Francisco Javier Barrena Castillo - @DogDeveloper
  • 46. Arquitectura promovida por la comunidad Francisco Javier Barrena Castillo - @DogDeveloper Módulo 1 (Auth) Service Controll Model Módulo 2 (Artículos) Service Controll Model Módulo 3 (Transactions) Service Controll Model Módulo N (Clientes) Service Controll Model Módulo principal
  • 47. El microlito Francisco Javier Barrena Castillo - @DogDeveloper PersistenceModule (TypeORM, Providers/DAO) SharedModule (CommonsyModelo) CoreModule (Providers/Service, Negocio) APIModule (Controllers, Middleware, Auth) App Module (Bootstrap y Config) Módulo reutilizable Módulo reutilizable KAFKA MODULE WINSTON LOGGER MODULE DOMINIO Módulo reutilizable AMAZON S3 MODULE Módulo reutilizable FACEBOOK AUTH MODULE
  • 48. HTTP SERVICE El “microservicio” Francisco Javier Barrena Castillo - @DogDeveloper Módulo Service Controll Model Módulo Service Controll Model Módulo Service Controll Model Módulo Service Controll Model FRONT USUARIOS PEDIDOS ARTÍCULOS PRECIOS
  • 49. HTTP SERVICE El “microservicio” Francisco Javier Barrena Castillo - @DogDeveloper Módulo Service Controll Model Módulo Service Controll Model Módulo Service Controll Model Módulo Service Controll Model FRONT USUARIOS PEDIDOS ARTÍCULOS PRECIOS
  • 50. i+d en el iti Francisco Javier Barrena Castillo - @DogDeveloper
  • 51. HTTP SERVICE True microservice Francisco Javier Barrena Castillo - @DogDeveloper Módulo Service Controll Model Módulo Service Controll Model Módulo Service Controll Model Módulo Service Controll Model FRONT USUARIOS PEDIDOS ARTÍCULOS PRECIOS
  • 52.
  • 53.
  • 54. Francisco Javier Barrena Castillo - @DogDeveloper Gracias
  • 55. i+d en el iti Francisco Javier Barrena Castillo - @DogDeveloper

Notas del editor

  1. ¿Esta arquitectura es buena o mala? Depende del problema que queramos resolver Inicialmente, el concepto de modularizar y microservilizar parece bueno siempre. Y es especialmente bueno cuando hablamos de modularizar cosas que son independientes (como el logging por ejemplo) Pero cuando microservilizamos cosas que están relacionadas entre ellas, estamos generando más problemas de los que estamos resolviendo.