Si hablamos de javascript del lado del servidor, todos pensamos en Node, pero lo cierto es que prácticamente nadie utiliza Node puro. Lo más habitual es acompañar a Node con otros frameworks que nos faciliten la tarea, como Express o Loopback. Si bien estos frameworks son estupendos, no promueven un código mantenible ni aplican patrones, como la inyección dependencias, que convenza a los desarrolladores enamorados de paradigmas como Java o .NET. NestJS es un nuevo framework para el desarrollo de backends basados en Node que convencerá, por fin, a los más vetustos developers. Talk is cheap...
Find out more presentations at https://madrid2018.codemotionworld.com/speakers/
Francisco Javier Barrena | NestJS: Backends para javeros y punto-neteros con Typescript | Codemotion Madrid 2018
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
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
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
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
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
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 en TypeScript, 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
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
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