Hemos descansado lo suficiente, ¿qué sigue?

Rate this content
Bookmark

Muchos desarrolladores están familiarizados con el consumo/diseño de APIs RESTful, pero ¿qué pasa con la construcción y consumo de APIs GraphQL y gRPC? ¿Qué pasa con las APIs impulsadas por eventos o asíncronas? ¿Cuáles son los beneficios y las limitaciones técnicas de cada una? Vamos a adentrarnos en la madriguera y explorar algunos de estos tipos de API como alternativas a REST.

W. Ian Douglas
W. Ian Douglas
17 min
11 Dec, 2023

Video Summary and Transcription

Esta charla compara las APIs RESTful, las arquitecturas impulsadas por eventos y las APIs de rendimiento de baja latencia. Discute las limitaciones de las APIs RESTful y la necesidad de tecnologías más nuevas como GraphQL. La charla explora la arquitectura impulsada por eventos utilizando webhooks y web sockets, así como los beneficios de gRPC como una alternativa de alto rendimiento. También destaca la integración de gRPC con el desarrollo de front-end y el uso de buffers de protocolo para mejorar el rendimiento. Por último, enfatiza la importancia de considerar la familiaridad del equipo y la infraestructura al elegir una arquitectura de API.

Available in English

1. Introducción

Short description:

Hola a todos. Soy Ian Douglas, un defensor de desarrolladores senior en Postman. Hoy, estaré comparando las API RESTful, las arquitecturas impulsadas por eventos y las API de rendimiento de baja latencia. ¡Vamos a sumergirnos!

Hola a todos. Soy Ian Douglas. Soy un defensor de desarrolladores senior en Postman, y gracias por tenerme en TestJS. Voy a hacer una charla hoy comparando las API RESTful, arquitecturas impulsadas por eventos He estado en la industria tecnológica durante mucho tiempo. La mayoría de mis canas provienen de trabajar en más de una docena de startups y de tener dos adolescentes. He pasado más de ocho años en el espacio de defensa , cuatro años de los cuales estuvieron en educación, enseñando a las personas sobre software. Por otro lado, también estoy muy interesado en el entrenamiento de perros, la impresión en 3D, el coaching de career, y realmente me gustan los chistes realmente malos, así que verás algunos de esos en mis diapositivas también.

2. Normas RESTful y APIs impulsadas por eventos

Short description:

En esta parte, discutiremos las normas RESTful, las APIs impulsadas por eventos como los web hooks y los web sockets, y las APIs de rendimiento de baja latencia como gRPC. Las APIs RESTful se han vuelto populares, pero necesitan mantenerse al día con la nueva tecnología. HTTP 1 tiene limitaciones, como la falta de interrupción de un cliente y la subextracción o sobreextracción de datos. Tecnologías como GraphQL proporcionan formas más eficientes de enviar datos. También exploraremos la arquitectura impulsada por eventos, incluyendo WebSockets y WebHooks, que permiten el procesamiento asíncrono e impulsado por eventos.

Así que esta es la rápida agenda que vamos a repasar. Voy a darles algunos antecedentes sobre las normas standards RESTful. Vamos a hablar sobre las APIs impulsadas por eventos como los web hooks y los web sockets, y luego vamos a hablar sobre las APIs de performance de baja latencia como gRPC.

Así que REST fue definido en 2000. Mucha gente que está trabajando en desarrollo de software hoy en día sabe qué son los servicios REST. El término servicios RESTful apareció poco después en unos pocos años, aunque no hay una forma muy fácil de determinar cuándo surgió el término en sí. Sucedió porque a la mayoría de los desarrolladores no les gustaba seguir reglas tan estrictas. Querían cierta flexibilidad en lo que construían. La mayoría de las escuelas hoy en día que están enseñando diseño de API design están enseñando diseño de API design RESTful, o están enseñando consumo de API con APIs RESTful principalmente. Postman en realidad tiene un programa de estudiantes donde trabajamos con escuelas para que los estudiantes usen Postman sobre otros tipos de arquitecturas de API, también. Por muy populares que hayan sido, las APIs RESTful parecen un poco atascadas en el territorio de la versión 1.1 de HTTP y necesitan mantenerse al día con la nueva tecnología. Empresas como Google empezaron a introducir nuevos protocolos como speedy, que fue la base básica para HTTP 2.0. Por ejemplo, en HTTP 1, es un poco como una llamada telefónica donde llamo a alguien y le hago una sola pregunta, obtengo una sola respuesta y luego colgamos el teléfono. La próxima vez que necesite llamar a alguien y obtener más información, tengo que llamar, identificarme, hacer mi pregunta, obtener mi respuesta y colgar. Otro problema con HTTP 1 es que no hay forma de interrumpir a un cliente. Si un cliente se conecta a un servidor y dice, me gustaría subir algunos data, el servidor puede decir okay, y el servidor puede simplemente enviar gigabytes o terabytes de data antes de que el servidor tenga permiso para interrumpir y decir, espera, no puedo procesar todos los data que acabas de enviar. También tenemos un problema en las tecnologías RESTful que llamamos subextracción o sobreextracción, que es donde no tenemos formas eficientes de enviar data. Estamos enviando demasiado data y esperando que nuestros front ends oculten ese data, lo que puede llevar a problemas de security, o no enviamos suficiente data, lo que significa que tengo que hacer más y más de estas conexiones de nuevo. Así que tecnologías como GraphQL aparecieron en la escena, permitiendo al cliente especificar qué campos devolver como parte de la solicitud. Esto podría suceder en REST con parámetros, pero es un poco más difícil de hacer eso y pone un poco más de trabajo en el desarrollador para ser capaz de implementar qué campos enviar de vuelta como parte de un parámetro de consulta, por ejemplo.

Si has estado trabajando con desarrollo de front-end y tecnologías de front-end, probablemente has trabajado con WebSockets o cualquier tipo de característica colaborativa, como un sistema de mensajes de chat o aplicaciones impulsadas por eventos como juegos. Así que, voy a darles una rápida lección sobre WebSockets y WebHooks mientras miramos la arquitectura impulsada por eventos por un momento. La idea de las APIs asíncronas es que están impulsadas por eventos. Hay dos métodos clásicos, WebHooks y WebSockets, como mencioné. Todavía están basados en HTTP, y por lo tanto hacen una conexión, transfieren data, y luego se desconectan. Sin embargo, los WebSockets, a diferencia de las APIs RESTful y los WebHooks, pueden mantener una conexión abierta durante un largo período de tiempo, y cualquiera de los lados puede enviar data de ida y vuelta en cualquier momento. Y por lo tanto permite el procesamiento impulsado por eventos, que cuando algo sucede, puedes transmitirlo a través de una conexión que ya está abierta. Los desarrolladores no necesariamente necesitan pausar y esperar una respuesta antes de continuar trabajando. Así que puedo enviar una solicitud, y luego puedo continuar mi ciclo de eventos, esperando por otra interacción del usuario y esperar a que esa respuesta regrese. Así que, los ciclos de eventos como las promesas y otros mecanismos llamados async y await permiten a los desarrolladores elegir cuándo pausar la ejecución para esperar una respuesta o simplemente procesarla en segundo plano.

3. Webhooks, Web Sockets, GraphQL y gRPC

Short description:

Los webhooks y los web sockets se utilizan comúnmente para aplicaciones en tiempo real, mientras que GraphQL introduce la transmisión de datos y los eventos enviados por el servidor. Las API asíncronas tienen complejidades de diseño y desafíos con la reconciliación de datos, la limitación de la tasa y el estrangulamiento. Combinando lo mejor de las API RESTful y las API asíncronas, gRPC ofrece conexiones de larga duración, enfoque de datos binarios y rendimiento mejorado. gRPC se basa en la versión HTTP 2 y tiene cuatro mecanismos de transferencia de datos diferentes.

Normalmente, vemos los webhooks utilizados en un mecanismo de respuesta. Por ejemplo, alguien paga una factura con algo como PayPal. PayPal puede llamar a un webhook que usted especifica que puede tomar alguna otra acción como actualizar su sistema CRM. Como se mencionó anteriormente, los web sockets se utilizan comúnmente para aplicaciones más en tiempo real donde necesita mantener esa conexión abierta y tener una conversación. Puede ser necesario intercambiar cierta cantidad de estado al conectar o reconectar para reanudar donde lo dejó por última vez, como, en un mecanismo de chat, qué mensaje vimos la última vez para operaciones en tiempo real?

GraphQL también tiene algo ahora llamado transmisión de data que llaman suscripciones. Es un poco como un patrón de publicar-suscribir, que a veces llamamos PubSub. Hay otras opciones aquí, incluyendo mecanismos más nuevos llamados eventos enviados por el servidor, donde los servidores pueden enviar data a un cliente. De nuevo, porque estos canales asíncronos se mantienen abiertos durante un largo período de tiempo. Aún así, lo asíncrono tiene algunos problemas. Puede ser más difícil de design y planificar ya que no sabes qué eventos están sucediendo en ningún orden particular. Así que podrías necesitar reconciliar tus data en ambos extremos de la conexión para asegurarte de que todo se completó. Los mecanismos de webhook necesitan asegurarse de que cualquier sistema que lo llame pueda realmente enrutar a el servidor, lo cual es complicado cuando estás lidiando con mecanismos de red internos o pasarelas de API y así sucesivamente. Hay otros problemas que puedes encontrar con lo asíncrono, incluyendo la limitación de la tasa y el estrangulamiento de data, lo cual puede ser más desafiante.

Así que voy a hacer una pausa en esta pantalla por un momento si quieres mirar algunas diferencias primarias entre las API RESTful y las API asíncronas en cuanto a mecanismos de transferencia de data y complejidad de design y así sucesivamente. Las API asíncronas, tradicionalmente WebSockets, van a estar construidas principalmente en la versión HTTP dos. Los webhooks todavía pueden estar actuando como API RESTful y todavía usando HTTP 1.1. Pero en las API asíncronas, obteniendo esa respuesta, el cliente proporciona un medio para responder más tarde o ser interrumpido más tarde cuando un evento ha sucedido. Pero eso aumenta tu complejidad de design. Y el orden en que tus solicitudes y respuestas están volviendo no siempre es predecible y puede que necesite haber alguna reconciliación más tarde.

Así que hablemos sobre el rendimiento de la API y algunas cosas a tener en cuenta si necesitamos tomar lo mejor de las API RESTful y las API asíncronas. Por supuesto, podríamos escalar nuestro hardware y añadir más sistemas para manejar la carga. Y eso ayudará un poco en el lado del rendimiento, pero plantea otras preocupaciones y problemas, especialmente con el costo de los proveedores de computación en la nube. Entonces, ¿cómo podemos combinar lo mejor de las arquitecturas de API que hemos mencionado hasta ahora, como controlar nuestros data, pero también manejar cosas como data transmitido o tener conexiones de larga duración? ¿Qué pasaría si hubiera un tipo de API que nos diera la flexibilidad de una única solicitud de respuesta como REST o la capacidad de transmitir data en cualquier dirección, del cliente al servidor o ambos, y también permitir que esas conexiones permanezcan abiertas durante largos períodos de tiempo, pero también te dé un gran impulso de rendimiento para acelerar mientras minimizas tu rendimiento de data? Así que tomando lo mejor de todas estas cosas juntas, y podemos mirar a gRPC. Así que gRPC fue desarrollado por Google y está construido sobre la versión HTTP 2. Esto permite esas conexiones de larga duración, similar a los web sockets, y utiliza un enfoque de data binario por defecto. Todavía es un trabajo en progreso. No hay demasiadas API gRPC de cara al público por ahí. Pero estamos viendo mucho crecimiento. Otra área de crecimiento que estamos viendo es una biblioteca de JavaScript llamada gRPC web, que te permitirá conectarte a servidores gRPC desde aplicaciones web, donde principalmente fue introducido para ser comunicación de microservicios de servidor a servidor. gRPC tiene cuatro diferentes mecanismos de transferencia de data.

4. Rendimiento e Integración de gRPC

Short description:

gRPC es una alternativa de alto rendimiento a las API RESTful y WebSockets. Ofrece compresión incorporada y permite la transmisión de datos en ambas direcciones. La biblioteca web gRPC ha estado disponible desde 2018 y proporciona ejemplos para implementar gRPC en varios marcos de trabajo. Con estructuras de datos de tipo estático y validación automática de datos, gRPC simplifica el desarrollo. Aunque tradicionalmente se ha utilizado para aplicaciones móviles y comunicación de servidor a servidor, la biblioteca web gRPC permite la integración en el front-end. Al utilizar protocol buffers, gRPC logra un gran impulso de rendimiento y hace cumplir los tipos de datos. Implementar una API RESTful en la parte superior de HTTP2 es posible, pero GraphQL ofrece una combinación de REST y gRPC con cargas útiles JSON y un patrón PubSub para la comunicación asíncrona.

El primero es muy parecido a una API RESTful de una única solicitud, una única respuesta, y luego una desconexión. Los otros son una combinación de que el cliente quiere transmitir un montón de data al servidor o el servidor transmitiendo un montón de data al cliente, o transmitiendo en ambas direcciones. La idea de transmitir aquí es que puedes enviar múltiples solicitudes o respuestas en cualquier momento a medida que ocurren eventos en ambos extremos de la conexión.

Debido a todo esto, junto con cierta compresión incorporada, gRPC es típicamente de siete a diez veces más eficiente que las API RESTful, principalmente debido a la versión HTTP 2, y eso permite mucha de la comunicación de ida y vuelta entre el cliente y el servidor antes de desconectar.

Entonces podrías estar diciendo, bueno, gRPC es solo para el nivel de sistema o desde un dispositivo móvil a un servidor. Pero de nuevo, esta biblioteca web gRPC, fue introducida hace un tiempo, fue puesta en disponibilidad general hace cinco años en 2018. La biblioteca ha tenido mucho trabajo en ella, es bastante robusta, y hay varios ejemplos por ahí para implementar gRPC en frameworks como React y Vue, WebAssembly y Blazor, y más. gRPC tiene todo lo que necesitamos, colectivamente para reemplazar potencialmente REST y WebSockets en aplicaciones de front-end con una única architecture, y las data estructuras son de tipo estático. Así que si la biblioteca del cliente la desempaqueta, puedes confiar en que la data validation ya ha ocurrido, no necesitas validar si este atributo es realmente una cadena, es este atributo realmente un número. Si el cliente gRPC es capaz de desempaquetar esa data payload, ya ha hecho esa validation por ti. Y comienza a enviar un error de vuelta a lo que envió ese mensaje diciendo que no puedo procesar eso.

Todo esto es bastante nuevo, sin embargo. Y necesitamos que más personas comiencen a usar esta tecnología y ayuden con la documentation y ejemplos y comiencen a hacer aplicaciones reales para este proceso web gRPC para realmente tomar hold. Así que de nuevo, voy a hacer una pausa aquí por un momento y puedes ver algunas de las diferencias entre las API RESTful y las API gRPC. Las API gRPC tienen mucha similitud con las API asíncronas, pero te dan este extra performance boost. Así que de nuevo, está construido en la parte superior de la versión HTTP dos. Obteniendo una respuesta, puedes hacerla síncrona como REST. Puedes hacerla asíncrona como webhooks. Pero la design complejidad es generalmente mucho más alta. No permite la flexibilidad para lo que envías en el mensaje. Es un formato de mensaje muy rígido. Y como vimos entre REST y RESTful, algunos desarrolladores quieren más de esa flexibilidad. Hay algunos data tipos que permiten la provisión para esto dentro del formato binario que envías estos mensajes llamados protocol buffers que permitirán diferentes tipos de data para ser enviados o puedes simplemente enviar cosas como largas cadenas y hacer tu propia codificación y decodificación.

El caso de uso típico de gRPC ha sido tradicionalmente mobile apps y comunicación de servidor a servidor para cosas como registro de eventos y así sucesivamente, o para juegos móviles, pero con la biblioteca web gRPC, hay mucha flexibilidad aquí para ahora introducir esto como algo para trabajar en el front end también. De nuevo, porque esa data estructura es un formato binario usando protocol buffers o proto buffs como podrías escucharlos referidos, obtienes un gran performance boost y esa data validation ya está cuidada, lo que simplifica tu código.

La pregunta aquí entonces es, bueno, ¿no podríamos simplemente implementar una API RESTful en la parte superior de HTTP2 y ganar algunos de esos beneficios que vimos entre Websockets y gRPC y webhooks? Es como, sí, podrías si quieres construir eso. GraphQL es un poco de REST y gRPC con cargas útiles JSON donde puedes decirle a GraphQL, quiero llamar a esta instrucción y quiero que estos campos vuelvan, y con su nuevo proceso de suscripción es un poco como asíncrono también con ese patrón PubSub donde puedes suscribirte a diferentes canales y obtener eventos de vuelta del servidor a medida que ocurren. ¿Podríamos usar un formato binario en una API RESTful que haga cumplir los data tipos? Absolutamente. De hecho, puedes usar protocol buffers dentro de una API RESTful si quieres. Solo tienes que asegurarte de que cada cliente que se conecta sabe cómo desempaquetar el formato de mensaje protobuf y también lidiar con la rigidez del mensaje tiene que ser enviado en este formato.

5. Consideraciones de la Arquitectura de la API

Short description:

En el protobuf, puedes especificar campos opcionales. gRPC tiene un mecanismo de descubrimiento incorporado para los payloads de mensajes de la API e instrucciones. Implementar una arquitectura orientada a eventos usando REST es posible pero limitado. La versión HTTP 3, basada en QUIC, ofrece un rendimiento mejorado. Considera la familiaridad del equipo y la infraestructura al elegir una arquitectura de API.

Ahora, en el protobuf, puedes especificar que algunos campos son opcionales. Por lo tanto, no tienen que estar allí. Y de nuevo, puedes hacer tu propia codificación y decodificación, pero eso podría tener otras implicaciones en la eficiencia y el rendimiento de tu software.

Lo bueno de gRPC es que en realidad tiene un mecanismo de descubrimiento incorporado que permite a los clientes aprender sobre los payloads de mensajes de la API, así como los diferentes tipos de instrucciones que se pueden llamar. Ahora, normalmente esta introspección se desactiva en producción, pero mientras estás en modo de desarrollo o en modo de preparación, podrías activar esta introspección y ser capaz de recopilar datos del servidor en cuanto a lo que es posible, ¿qué métodos puedo llamar? ¿Cuáles son estos formatos de datos? ¿Cómo envío estos datos?

Otra pregunta es, ¿podríamos simplemente implementar algo como una arquitectura orientada a eventos usando REST? Más o menos, pero seguiría siendo un ciclo de solicitud y respuesta único debido a la versión HTTP uno y simular un flujo de datos entrantes es técnicamente posible. Así es como hemos gestionado el contenido en streaming durante algunas décadas, pero tiende a ser más construido en UDP para mecanismos de streaming para cosas como video y audio. Parte de la versión HTTP dos es que tus datos están cifrados por defecto. Con HTTP uno, tienes que construir tu propio cifrado o confiar en cosas como TLS. Así que podrías añadir otras capas de cifrado a esos datos también. De hecho, animamos a todos, por favor, cifren sus datos.

Hasta ahora, sin embargo, construir todas estas cosas y tener en cuenta todas estas cosas, has aumentado la complejidad de tu diseño de API bastante. Has hecho tu despliegue y tu gestión mucho más complejos, y probablemente has hecho tu infraestructura más compleja. Entonces, ¿realmente vale la pena? Elegir una arquitectura de API es un equilibrio delicado de rendimiento. Pero, ¿qué significa realmente el rendimiento? Cuando pensamos en la evolución entre la versión HTTP 1 y la versión 2 y las mejoras que se hicieron allí con las conexiones de larga duración y los formatos binarios y demás, y mirando hacia adelante a lo que va a ser el rendimiento de la versión HTTP 3, en realidad va a ser bastante interesante.

Así que hablemos por un momento de la versión HTTP 3. En realidad, se basa en un nuevo protocolo llamado QUIC, Q-U-I-C, y solo se construye en UDP. No se va a construir en TCP. Esto va a reducir parte del ruido de la comunicación, porque para cada paquete enviado, no tienes que esperar a que vuelva una respuesta. Va a tener una nueva gestión de sesiones incorporada para imitar las llamadas sin estado mientras sigue conservando los métodos HTTP, los encabezados y los sistemas de códigos de estado que hemos estado usando durante bastante tiempo ahora. De hecho, ha sido soportado ahora desde 2020 y 2021 en la mayoría de los navegadores principales. De hecho, la mayoría de las bibliotecas de clientes ya están soportando completamente HTTP 3. La última vez que lo comprobé, la única que no lo estaba soportando era la biblioteca Curl, que sigue siendo una biblioteca bastante importante.

Así que cuando se trata de rendimiento, lo otro en lo que pensar es ¿qué tan rápido puede el equipo trabajar en esto? Así que tengo algunas notas en esta diapositiva que básicamente dicen que soy un fan de los equipos que aprenden algo nuevo, pero si tu empresa necesita sacar algo rápidamente, ¿son estas tecnologías algo que tu equipo ya conoce? ¿O tu equipo va a tener que aprender esto? ¿Tu equipo de DevOps ya sabe cómo construir este tipo de infraestructura para soportar HTTP 2 o HTTP 3? Así que cuando pensamos en rendimiento, a menudo pensamos en el rendimiento del software. Pero, ¿qué pasa con el rendimiento del equipo y la cantidad de tiempo que le lleva al equipo construir lo que necesita construir? ¿Esa infraestructura ya está en su lugar? ¿Ya saben cómo configurar estas cosas? ¿O hay un camino de migración más fácil para el rendimiento en lugar de una reescritura total en alguna nueva arquitectura? Así que todas estas son cosas muy interesantes en las que pensar cuando pensamos en diferentes tipos de arquitecturas de API. Cuando pensamos en la historia de REST, y pasamos a las API asíncronas y las API orientadas a eventos cuando hablamos de cosas como WebSockets y Webhooks, pero también considerando el rendimiento de cosas como gRPC. Así que espero que este fondo haya sido útil. Estoy feliz de responder a cualquier pregunta que tengas. Mi nombre de usuario en la mayoría de las plataformas sociales, incluyendo LinkedIn y Twitter es iandouglas736. Si quieres hacer más preguntas, el código QR que ves en esta diapositiva también te llevará a toda mi información de contacto. Así que gracias de nuevo a todos en Test.js por tenerme hoy, y no dudes en ponerte en contacto con preguntas. Gracias por tu tiempo.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

A Guide to React Rendering Behavior
React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
Speeding Up Your React App With Less JavaScript
React Summit 2023React Summit 2023
32 min
Speeding Up Your React App With Less JavaScript
Top Content
Too much JavaScript is getting you down? New frameworks promising no JavaScript look interesting, but you have an existing React application to maintain. What if Qwik React is your answer for faster applications startup and better user experience? Qwik React allows you to easily turn your React application into a collection of islands, which can be SSRed and delayed hydrated, and in some instances, hydration skipped altogether. And all of this in an incremental way without a rewrite.
Network Requests with Cypress
TestJS Summit 2021TestJS Summit 2021
33 min
Network Requests with Cypress
Top Content
Whether you're testing your UI or API, Cypress gives you all the tools needed to work with and manage network requests. This intermediate-level task demonstrates how to use the cy.request and cy.intercept commands to execute, spy on, and stub network requests while testing your application in the browser. Learn how the commands work as well as use cases for each, including best practices for testing and mocking your network requests.
React Concurrency, Explained
React Summit 2023React Summit 2023
23 min
React Concurrency, Explained
Top Content
React 18! Concurrent features! You might’ve already tried the new APIs like useTransition, or you might’ve just heard of them. But do you know how React 18 achieves the performance wins it brings with itself? In this talk, let’s peek under the hood of React 18’s performance features: - How React 18 lowers the time your page stays frozen (aka TBT) - What exactly happens in the main thread when you run useTransition() - What’s the catch with the improvements (there’s no free cake!), and why Vue.js and Preact straight refused to ship anything similar
Testing Pyramid Makes Little Sense, What We Can Use Instead
TestJS Summit 2021TestJS Summit 2021
38 min
Testing Pyramid Makes Little Sense, What We Can Use Instead
Top Content
Featured Video
Gleb Bahmutov
Roman Sandler
2 authors
The testing pyramid - the canonical shape of tests that defined what types of tests we need to write to make sure the app works - is ... obsolete. In this presentation, Roman Sandler and Gleb Bahmutov argue what the testing shape works better for today's web applications.
The Future of Performance Tooling
JSNation 2022JSNation 2022
21 min
The Future of Performance Tooling
Top Content
Our understanding of performance & user-experience has heavily evolved over the years. Web Developer Tooling needs to similarly evolve to make sure it is user-centric, actionable and contextual where modern experiences are concerned. In this talk, Addy will walk you through Chrome and others have been thinking about this problem and what updates they've been making to performance tools to lower the friction for building great experiences on the web.

Workshops on related topic

React Performance Debugging Masterclass
React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
Designing Effective Tests With React Testing Library
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
Josh Justice
Josh Justice
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn
Building WebApps That Light Up the Internet with QwikCity
JSNation 2023JSNation 2023
170 min
Building WebApps That Light Up the Internet with QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Building instant-on web applications at scale have been elusive. Real-world sites need tracking, analytics, and complex user interfaces and interactions. We always start with the best intentions but end up with a less-than-ideal site.
QwikCity is a new meta-framework that allows you to build large-scale applications with constant startup-up performance. We will look at how to build a QwikCity application and what makes it unique. The workshop will show you how to set up a QwikCitp project. How routing works with layout. The demo application will fetch data and present it to the user in an editable form. And finally, how one can use authentication. All of the basic parts for any large-scale applications.
Along the way, we will also look at what makes Qwik unique, and how resumability enables constant startup performance no matter the application complexity.
How to Start With Cypress
TestJS Summit 2022TestJS Summit 2022
146 min
How to Start With Cypress
Featured WorkshopFree
Filip Hric
Filip Hric
The web has evolved. Finally, testing has also. Cypress is a modern testing tool that answers the testing needs of modern web applications. It has been gaining a lot of traction in the last couple of years, gaining worldwide popularity. If you have been waiting to learn Cypress, wait no more! Filip Hric will guide you through the first steps on how to start using Cypress and set up a project on your own. The good news is, learning Cypress is incredibly easy. You'll write your first test in no time, and then you'll discover how to write a full end-to-end test for a modern web application. You'll learn the core concepts like retry-ability. Discover how to work and interact with your application and learn how to combine API and UI tests. Throughout this whole workshop, we will write code and do practical exercises. You will leave with a hands-on experience that you can translate to your own project.
Next.js 13: Data Fetching Strategies
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Data Fetching Strategies
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introduction- Prerequisites for the workshop- Fetching strategies: fundamentals- Fetching strategies – hands-on: fetch API, cache (static VS dynamic), revalidate, suspense (parallel data fetching)- Test your build and serve it on Vercel- Future: Server components VS Client components- Workshop easter egg (unrelated to the topic, calling out accessibility)- Wrapping up
Detox 101: How to write stable end-to-end tests for your React Native application
React Summit 2022React Summit 2022
117 min
Detox 101: How to write stable end-to-end tests for your React Native application
Top Content
WorkshopFree
Yevheniia Hlovatska
Yevheniia Hlovatska
Compared to unit testing, end-to-end testing aims to interact with your application just like a real user. And as we all know it can be pretty challenging. Especially when we talk about Mobile applications.
Tests rely on many conditions and are considered to be slow and flaky. On the other hand - end-to-end tests can give the greatest confidence that your app is working. And if done right - can become an amazing tool for boosting developer velocity.
Detox is a gray-box end-to-end testing framework for mobile apps. Developed by Wix to solve the problem of slowness and flakiness and used by React Native itself as its E2E testing tool.
Join me on this workshop to learn how to make your mobile end-to-end tests with Detox rock.
Prerequisites- iOS/Android: MacOS Catalina or newer- Android only: Linux- Install before the workshop