Que es JAMstack?
Tags: aws, jamstack, serverless, serverlessenespanol
Published: 2020-10-10 23:21:22

Es un poderoso nuevo enfoque creado para satisfacer las demandas de aplicaciones modernas, rápidas, dinámicas y escalables que no requieren de una infraestructura de front end tradicional. Su lenguaje “madre” es Javascript, pero puedes utilizar otros como Python, Ruby or Go, cuenta además con una comunidad creciente con un futuro prometedor

<h2>Porque JAMstack?</h2>

“Performance” o rapidez es una de las razones principales por la cual desarrolladores se están inclinando hacia este concepto, los usuarios cada día tienen menos paciencia al navegar e interactuar con los navegadores, el uso del teléfono móvil cada día incrementa mas, los videos deben reproducirse instantáneamente, etc. JAMstack es un movimiento, una colección de mejores prácticas y flujos de trabajo que dan como resultado sitios web y móvil de alta velocidad, los cuales además son un placer trabajar

JAMstack posee un flujo de trabajo basado en Git, creo no es osado decir todo programador tiene por lo menos conocimientos básicos de Git, así que en este aspecto no hace falta mucha adaptación o aprendizaje, el proceso de deploración o despliegue también se realiza atraves de esta famosa herramienta, lo cual hace todo mas fácil

Algunas de las empresas que apoyan este nuevo concepto son:

[AWS](https://aws.amazon.com/es/)

[Netlify](https://app.netlify.com/)

[Vercel](https://nextjs.org/)

[Microsoft Azure](https://azure.microsoft.com/es-es/)

[Google cloud](https://cloud.google.com/gcp/?utm_source=google&utm_medium=cpc&utm_campaign=emea-gb-all-en-dr-bkws-all-all-trial-b-gcp-1009139&utm_content=text-ad-none-any-DEV_c-CRE_166510516938-ADGP_Hybrid%20%7C%20AW%20SEM%20%7C%20BKWS%20~%20BMM_1%3A1_GB_EN_General_Cloud_TOP_google%20cloud-KWID_43700053279267991-kwd-28176139768-userloc_1011759&utm_term=KW_%2Bgoogle%20%2Bcloud-NET_g-PLAC_&ds_rl=1242853&ds_rl=1245734&ds_rl=1242853&ds_rl=1245734&gclid=Cj0KCQjwhb36BRCfARIsAKcXh6GevegyIOymIj_pu6Fx8a7845Hbviy9qil64TuRTKc6OdhW4CtxIfYaAp4EEALw_wcB)

[Github](https://docs.github.com/es/github/getting-started-with-github/githubs-products)

Herramientas modernas y emocionantes como Next Js, Gatsby y Contentful también han ayudado a promover el movimiento, la comunidad está creciendo rápidamente

**Como funciona la autentificación de usuarios con JAMstack?**

Una aplicación JAMstack a menudo crea un token de identificación seguro almacenado en el navegador. (Este tipo de token se llama JavaScript Web Token, o JWT). Luego, la identidad se pasa con cada llamada a la API para que los servicios conozcan al usuario. Particularmen he experimentado con este proceso usando [AWS amplfy](https://aws.amazon.com/es/amplify/) y es sencillamente una experiencía placentera, sencilla y segura, es muy poco codigó el que se requiere para lograr una autentificación eficiente.

<h2>Pero que tienen de malo las aplicaciones actuales?</h2>

Pensemos por un momento en el enfoque más común en la actualidad para servir contenido web: para todas y cada una de las solicitudes realizadas a una app, los datos se extraen de una base de datos, se procesan en una plantilla, luego en el HTML, para que finalmente se envíen al navegador que la solicitó a través de la red

Cuando los servidores web crean repetidamente cada página por cada solicitud, comienza a parecer que ocurre demasiado trabajo en el lugar y momento equivocado. Después de todo, una regla general para el máximo rendimiento es realizar la menor cantidad de pasos posibles. ¿No deberíamos crear un nuevo HTML solo cuando el contenido o los datos cambian? y no cada vez que se solicita?

Resulta que así es exactamente como funciona JAMstack,  este es su flujo de trabajo moderno

Miremos los siguientes pasos: 

1. La fuente del sitio es un repositorio alojado que almacena contenido y código juntos como archivos editables 

2. Siempre que se realiza un cambio, se activa un proceso de compilación que presenta el sitio, creando el HTML final desde unas plantillas, contenido y datos 

3. Los activos preparados y renderizados se publican globalmente en un CDN, colocándolos físicamente lo más cerca posible de los usuarios finales

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jezgmb97pndefxc4vbsd.png)

De inmediato podemos ver que muchas menos cosas suceden para satisfacer cada solicitud. Hay menos puntos de error, distancia lógica para viajar y sistemas interactuando para cada solicitud. El resultado es un rendimiento mejorado en la infraestructura de alojamiento de forma predeterminada. Los "assets" se entregan en la interfaz lo más rápido posible porque están listos para ser servidos, ya están lo más cerca posible del usuario gracias al uso del CDN

Este enfoque elimina grandes cantidades trabajo innecesario. Dada la eficiencia y la simplicidad de ofrecer contenido previamente reproducido directamente desde una CDN, no es de extrañar que las app realizadas con JAMstack tienden a obtener las puntuaciones más altas en pruebas de velocidad. 

Este tipo de arquitectura es simple, mas fácil de escalar, ademas de poseer un estructura mas segura

**Seguridad**

La complejidad reducida de JAMstack ofrece otra ventaja: un perfil de seguridad muy bueno para nuestras apps

Menos piezas de infraestructura significan menos cosas para atacar y menos cosas en las que debe dedicar esfuerzo para colocar parches o proteger. Reducir la superficie es una buena estrategia para mejorar la seguridad y minimizar las vías de ataque, se reducen las oportunidades de comprometer el sistema, por lo tanto, la seguridad también mejora

<h2>Conclusión</h2>

JAMstack es un concepto novedoso, poderoso y con un futuro prometedor, parece tener mucho más sentido construir aplicaciones con este enfoque en comparación a las apps tradicionales, son mas rápidas, dinámicas, seguras y fácil de escalar

Hay muchas otras cosas interesantes acerca JAMstack, con este post solo estamos rozando la superficie, te invito a que comienzas a explorar este mundo atravéz de las herramientas y tecnologías mencionadas

Cuaquier duda acerca de este tema u otro relacionado, me puedes escribir atravéz de mi [Twitter](https://twitter.com/rolandobarbella)