Descansa de REST (y GraphQL)

Rate this content
Bookmark
Slides

Hay herramientas increíbles disponibles que te brindan una excelente seguridad de tipos. Pero cuando llegas a la obtención del lado del cliente, las cosas se vuelven locas. Incluso si tienes un backend perfectamente tipado, pierdes la información de tipos durante la comunicación del lado del cliente. Sí, puedes usar GraphQL o protobuf y generar tipos, pero... ¿qué tal si te digo que hay una forma más fácil? ¡Una forma que te permite desarrollar tus aplicaciones de manera más fluida que con REST o GraphQL? ¿Cómo? ¡RPC! Saluda a la máxima productividad con una experiencia de desarrollo fantástica.

32 min
02 Dec, 2022

Video Summary and Transcription

Esta charla explora la evolución de RPC y su relevancia en el desarrollo moderno de pila completa. Se discuten las limitaciones de SOAP y REST e introduce GraphQL como solución. El enfoque se centra en los marcos de RPC como tRPC y BlitzRPC, que proporcionan seguridad de tipos de extremo a extremo y una experiencia de desarrollo mejorada. La charla también destaca las ventajas de RPC en el contexto del desarrollo de pila completa con marcos como Next.js. Se discuten las mejoras futuras para las bibliotecas de RPC, incluida la habilitación de API de servidor para múltiples clientes y la creación de una herramienta de experiencia de desarrollo que combine las mejores características de BlitzRPC y tRPC.

Available in English

1. Introducción y Reconocimiento de Patrocinadores

Short description:

Hola a todos, bienvenidos de nuevo aquí en Berlín y bienvenidos de nuevo a la transmisión en vivo si están viendo desde casa. Estamos a punto de presentar a nuestro próximo ponente, Alexander. Gracias a Callstack por patrocinar. Callstack es un equipo de consultores y desarrolladores de React y React Native con colaboradores principales a bordo. Gracias también a Brintem, que ayudó al mundo a mantenerse en horario con su biblioteca de widgets de JavaScript. Ahora, sin más preámbulos, vamos a invitar a Aleksandra al escenario. Aleksandra es una ingeniera de software y está basada en Wroclew, Polonia. Es una desarrolladora full stack. Ha trabajado en Elixir, Golang, Python y TypeScript. Muchas gracias. Demos un gran aplauso a Aleksandra Stikora. Bienvenidos, todos.

viendo desde casa. Estamos a punto de presentar a nuestro próximo ponente, Alexander, en solo un segundo, pero antes de eso, solo quiero decir algunas palabras sobre nuestros maravillosos patrocinadores.

Gracias a Callstack por patrocinar. Callstack es un equipo de consultores y desarrolladores de React y React Native con colaboradores principales a bordo. Personalmente he trabajado con ellos y son personas maravillosas. Gracias también a Brintem, que ayudó al mundo a mantenerse en horario con su biblioteca de widgets de JavaScript. El conjunto de herramientas de interfaz de usuario contiene componentes de programación, gráficos de Gantt y cuadrícula de datos. Visiten a Brintem en su stand aquí para una demostración personal o si están en casa, vayan a Brintem.com.

Ahora, sin más preámbulos, vamos a invitar a Aleksandra al escenario. Recuerden hacer preguntas en Slido. Si van a Slido.do y usan el código 0212, podrán hacer preguntas que luego se le harán a Aleksandra aquí en el escenario en vivo. Aleksandra es una ingeniera de software y está basada en Wroclew, Polonia. Ha hecho muchas cosas. Es una desarrolladora full stack. Ha trabajado en Elixir, Golang, Python y TypeScript. Anteriormente fue líder técnica de la consola de Hasura y recientemente ha estado trabajando, siendo la principal responsable de Blitz. Muchas gracias. Demos un gran aplauso a Aleksandra Stikora. Bienvenidos, todos. Gracias por la introducción.

2. Explorando la Capa de API y RPC

Short description:

Hoy me enfocaré en construir aplicaciones full stack de React, específicamente en la capa de API. Las APIs actúan como puentes de comunicación entre las aplicaciones cliente y servidor, resolviendo problemas como el código repetitivo, la seguridad de tipos y el manejo de errores. Herramientas como TRPC y BlizRPC ofrecen soluciones a estos desafíos. Para comprender su enfoque, exploraremos la historia de RPC, que es la base de los servicios web. RPC, o Llamada a Procedimiento Remoto, fue acuñado por Bruce J. Nelson en 1981. ¡Sumergámonos en ello!

Así que mi charla de hoy es descansar de REST. Probablemente te estés preguntando qué pasó aquí, ¿verdad? ¿De qué trata esta charla? Me enfocaré en construir aplicaciones full stack de React, pero específicamente quiero hablar sobre la capa de API porque para mí es muy emocionante lo que está sucediendo en el desarrollo web full stack. Tenemos el nuevo Next.js con componentes del lado del servidor de React. TRPC se está volviendo muy popular. Remix está creciendo y recientemente fue adquirido por Shopify. Así que hay mucho en torno a la capa de API y la construcción de aplicaciones full stack.

Antes de comenzar, quiero explicar. Sí, hay un meme. Quiero explicar qué es una API. En un mundo de programación distribuida, cuando tenemos computadoras que necesitan comunicarse entre sí, por ejemplo, tenemos una aplicación cliente, una aplicación servidor o diferentes servidores que necesitan comunicarse entre sí, necesitamos un puente que permita esa comunicación y una API es ese puente. ¿Por qué estamos hablando de esto? Porque un escenario común para una aplicación full stack es que tienes una base de datos y el cliente necesita acceder a esta base de datos. Pero incluso si tu base de datos fuera accesible públicamente, no puedes llamarla desde el cliente porque eso expondría todas las credenciales de tu base de datos. Por lo general, tenemos servidores que son responsables de comunicarse con la base de datos. Pero cada vez que tenemos que hacer que dos entidades separadas se comuniquen y se entiendan entre sí, en este caso el cliente y el servidor, nos enfrentamos a muchos problemas. Algunos de ellos son toneladas de código repetitivo, pérdida de seguridad de tipos, manejo repetitivo de errores. ¿Podemos hacer algo al respecto? Afortunadamente, sí podemos. Ahora vemos nuevas herramientas, nuevos proyectos que están listos para resolver este problema. Tenemos procedimientos TRPC. Tenemos BlizRPC con resolutores de consultas y mutaciones. Tenemos Remix Data Loader, Componentes del lado del servidor de React y probablemente muchos más que no incluí en esta diapositiva. Pero en mi charla de hoy, me enfocaré en el enfoque adoptado por los primeros dos, TRPC y BlizRPC.

Esto significa que vamos a hablar de RPC. Pero para entender cómo llegamos aquí, cómo llegamos a tener herramientas como TRPC y BlizRPC, voy a llevarte de vuelta a los años 80 para ver un poco de historia. ¿Por qué empezamos aquí? Porque RPC es el comienzo de los servicios web. Y 1981 fue el año en que Bruce J. Nelson escribió una tesis y acuñó este término. Así que comencemos explicando qué es RPC. Significa Llamada a Procedimiento Remoto. Imagina que tienes un procedimiento local, Bienvenida.

3. RPC, Corba, and SOAP

Short description:

RPC es la práctica de llamar funciones de forma remota. Resuelve problemas como el acoplamiento estrecho entre el cliente y el servidor, la dependencia del lenguaje y la falta de cancelación de solicitudes. Corba, una mejora de RPC, tenía como objetivo ser independiente de la plataforma y el lenguaje con la introducción del lenguaje de definición de interfaz. Sin embargo, Corba tenía problemas de mapeo y una curva de aprendizaje pronunciada. Esto llevó al desarrollo de SOAP, un protocolo más simple que utiliza XML para las solicitudes.

Y cuando lo tienes en la misma computadora, simplemente lo llamas así, como en la diapositiva. Pero ahora imagina que Bienvenida está en un procesador diferente, en un servidor diferente, y tienes que usar una red para llamarlo. Ahí es cuando entra en juego RPC, y RPC es la práctica de llamar funciones de forma remota. Y una API de RPC se construye con funciones, y las funciones se llaman con argumentos. Por supuesto, así no se veía RPC hace 40 años porque no existía HTTP ni JavaScript todavía, pero esa era la idea.

Entonces, ¿cuáles eran los problemas? Uno de los problemas principales era que la convención de procedimiento hacía que el cliente y el servidor estuvieran estrechamente acoplados, lo que significa que era casi imposible que el servidor fuera consumido por muchos clientes. Otro problema era que estaba ligado a un lenguaje específico. Otros problemas eran la falta de cancelación de solicitudes, el envasado de parámetros, el manejo de excepciones, y obligar a los desarrolladores a usar servidores multi-hilo. Algunos de esos problemas ya no son relevantes, pero hace 40 o casi 40 años atrás, hizo que los desarrolladores buscaran algo mejor, algo más adecuado para el mundo de la programación distribuida. Y esta nueva cosa era Corba.

Entonces, ¿qué fue genial en los años 90 aparte de las boy bands, Nintendo y los patines en línea? La programación orientada a objetos. Y en eso confiamos en Corba. Así que en Corba tenemos un proceso de servidor, que contiene objetos, y tenemos un proceso de cliente que realiza solicitudes para obtener este objeto. Corba, a diferencia de RPC, su objetivo era ser independiente de la plataforma y el lenguaje. Y para lograr eso, introdujo el lenguaje de definición de interfaz. Así que eso fue una gran mejora. Y uno de los IDL más populares con el que es posible que estés familiarizado es actualmente Protobuf. Pero introducir IDL resolvió muchos problemas, pero tampoco fue tan fácil. Hubo muchos problemas de mapeo. Porque ¿podemos mapear todo, como tipos, excepciones, manejo de excepciones? La respuesta terminó siendo no. Y aparte de eso, este objetivo de ser agnóstico agregó mucha complejidad y causó que Corba tuviera una curva de aprendizaje pronunciada. Así que nuevamente, hubo una necesidad de algo mejor, algo nuevo.

Y como Corba era complejo y pesado, había una necesidad de algo simple. Así que aquí vamos, el protocolo simple de acceso a objetos a finales de los años 90. Entonces, en SOAP, tenemos este sobre que las solicitudes son por defecto publicaciones HTTP. Sin embargo, SOAP no está ligado a ningún protocolo de transporte. Pero por defecto, utiliza HTTP. Así que es XML. Tenemos un sobre que identifica la API solicitada. Y luego tenemos un cuerpo SOAP con los parámetros que se pasan al servidor.

4. SOAP, REST, and GraphQL

Short description:

SOAP, aunque mejor que Corba, tenía sus propias limitaciones. Era pesado, estaba estrechamente acoplado al servidor y carecía de almacenamiento en caché en la capa HTTP. REST, por otro lado, es un conjunto de restricciones arquitectónicas que se centran en los recursos en lugar de los procedimientos. Sin embargo, REST puede ser difícil de seguir y muchas APIs que afirman ser RESTful son en realidad RPC sobre HTTP. Esto conduce a problemas como el exceso de datos y la falta de seguridad de tipo de extremo a extremo. Para abordar estos problemas, se introdujo GraphQL, que permite obtener datos de manera eficiente con una sola consulta.

Aquí tienes un ejemplo de una solicitud y una respuesta SOAP. Así que eso fue mejor. Se suponía que era más fácil que Corba. De hecho, SOAP todavía se utiliza en la actualidad. Pero debido a que era solo XML, era pesado y requería más ancho de banda. Y como utilizaba POST de forma predeterminada, no había almacenamiento en caché en la capa HTTP. Y otro problema. Estaba estrechamente acoplado al servidor. Así que volvemos al mismo problema que con RPC. Entonces, ¿qué sigue? REST. No es un protocolo como SOAP. Es un conjunto de restricciones arquitectónicas. En REST, el servidor expone recursos y el cliente solicita o actualiza esos recursos. Dado que SOAP tenía este concepto de sobre y era pesado, a menudo se hacen comparaciones diciendo que SOAP era como un sobre y REST era como una postal, más ligero. Entonces, ¿cómo se compara con RPC? RPC se trataba de procedimientos y REST se trata de recursos. Así que aquí tienes una comparación de cómo se vería una API similar tanto en RPC como en REST. En REST, le preguntas al servidor si puede darte el estado de este recurso o le das el estado del recurso y le pides que lo almacene. Y con RPC, le dices al servidor que llame a este procedimiento por ti. Pero, ¿qué hay de malo en REST? Bueno, en primer lugar, es muy difícil, es difícil seguir las restricciones. Son geniales. Te brindan muchas garantías sobre tu API, pero también son bastante limitantes y difíciles de seguir. De hecho, la mayoría de las APIs REST que se autodenominan REST no son realmente REST. Son RPC sobre HTTP, que utiliza JSON. Pero no importa si tu API REST es completamente RESTful o algo REST.Hay problemas comunes con los que lidiar. Algunos de ellos son, por ejemplo, el exceso de datos, es decir, obtener datos innecesarios y el problema del más uno, es decir, tener que hacer múltiples viajes al servidor para obtener datos para una vista. Las restricciones limitantes que mencioné antes. Y lo que también es importante, no hay seguridad de tipo de extremo a extremo. Entonces llegó GraphQL, con el objetivo de resolver esos problemas. Y con GraphQL fue muy fácil resolver el problema del más uno, porque para obtener datos para una vista, podemos enviar solo una consulta. Este problema del más uno no se resuelve realmente, simplemente lo trasladamos al servidor, pero desde la perspectiva del usuario que utiliza la API de GraphQL, no tenemos que hacer esas múltiples llamadas como con REST.

5. Explorando GraphQL y RPC

Short description:

GraphQL comparte algunas ideas similares a SOAP y tiene sus propios problemas. Escribir servidores GraphQL puede ser difícil con mucho código repetitivo. Volver a visitar RPC permite tratar las llamadas remotas como locales, proporcionando seguridad de tipo de extremo a extremo. Un cliente de API en el lado del cliente puede eliminar la necesidad de llamadas fetch y proporcionar una mejor experiencia de desarrollo. Se muestra una aplicación de demostración para dibujar nombres con trpc y Blitz RPC.

También es fácil eliminar el problema de sobreobtención de datos, porque es el cliente quien controla los datos que obtiene. Pero GraphQL comparte algunas ideas similares a SOAP, lo que significa que también comparte sus problemas. Uno de ellos es que también es por defecto una solicitud HTTP POST, por lo que no hay almacenamiento en caché en la capa HTTP a menos que uses algo como GraphQL CDN creado por MaxTeuber. Luego, si deseas tener seguridad de tipo de extremo a extremo, debes generar tipos, lo cual no es un gran problema. Funciona muy bien, pero siempre debes considerar un paso adicional.

Otro problema es que escribir servidores GraphQL es una tarea bastante difícil y hay mucho código repetitivo que debes hacer. Por otro lado, puedes usar herramientas como Hasura o Postgre file, pero esas herramientas mapean tu base de datos a una API de GraphQL, lo que puede significar que trasladas mucha lógica de dominio al frontend.

Entonces, ¿qué sigue? Como recientemente aprendimos que GraphQL es solo un montón de llamadas RPC mal agrupadas, volvemos a hablar sobre RPC. Vamos a revisitar la promesa original de RPC, que era permitirte tratar las llamadas remotas como si fueran locales. ¿Por qué es genial y por qué es importante en este momento? Es porque TypeScript y la tipificación estática se han convertido en un estándar de facto, y nunca ha sido tan importante tener seguridad de tipo de extremo a extremo. Este problema de seguridad de tipo de extremo a extremo en la capa de API es algo crucial que resolver. Ya vimos este ejemplo anteriormente. Ahora mismo, solo agregué una llamada adicional a la base de datos. Entonces, si tu backend es perfectamente seguro en cuanto a tipos, luego haces esta llamada fetch en el frontend y pierdes esa seguridad de tipo. Quiero decir, podrías generar tipos, esa es una opción, o puedes volver a escribir los tipos en el cliente, pero, ya sabes, eso es trabajo adicional. Sería genial si pudiéramos deshacernos de esta parte de fetch, si pudiéramos, por ejemplo, crear un cliente en el lado del cliente que conozca todo sobre la API, que sepa cuáles son los procedimientos disponibles en el servidor, cuáles son los tipos de argumentos, y así sucesivamente, algo así.

Ahora tengo una pequeña aplicación de demostración. Esto es algo que construí recientemente, porque pronto es Navidad y realmente no me gusta recibir demasiados regalos, porque eso es mucho desperdicio. Así que construí esta aplicación que estoy usando con mi familia y amigos, que te permite sacar un nombre, para que solo compres un regalo para una persona. Y vamos a ver cómo se ve este sorteo de nombres tanto en trpc como en Blitz RPC. Te llevaré a VS code. Aquí está una mutación de sorteo de nombres con Blitz RPC. Lo que está sucediendo aquí es que estoy usando el tubo de resolución de Blitz. Ni siquiera es necesario. No entraré en muchos detalles al respecto. Pero lo importante aquí es que esta mutación es una función asincrónica de JavaScript. Tengo toda la lógica adentro. Tengo llamadas a la base de datos, lógica para determinar qué nombres están disponibles, y así sucesivamente. Y luego lo que sucede es que estoy usando esta función importándola directamente desde el servidor, desde la carpeta de mutaciones en mi componente React. Hay este gancho useMutation que es un envoltorio de Blitz en React query.

6. Explorando BlitzRPC y tRPC

Short description:

Blitz es una importación mágica que se intercambia por una llamada HTTP en tiempo de compilación para evitar la filtración de datos de la base de datos. Se conocen las definiciones de tipo y los requisitos de argumentos. tRPC define procedimientos en un proyecto Next.js como una ruta de API de Next.js. El objetivo es mostrar la seguridad de tipo de pila completa y la posibilidad de mejorar tecnologías pasadas. Next.js y Remix son frameworks que permiten esto.

Tiene las mismas propiedades. Entonces, ¿qué sucede aquí es que Blitz es algo mágico? Esta importación se intercambia por una llamada HTTP en tiempo de compilación para que no haya filtración de datos de la base de datos al frontend. Pero tenemos todas las definiciones de tipo que conocemos con las mutaciones de dominio de retorno. Sabemos que tenemos acceso a todas las propiedades de consulta de React. Sabemos qué argumentos acepta esta función. Tengo un ejemplo aquí, acepta un nombre de grupo y un nombre de miembro, así que si elimino esto, obtendré un error, TypeScript me dirá que me falta un argumento.

Entonces eso fue BlitzRPC, ahora veamos tRPC. Con tRPC estoy definiendo los procedimientos, este es un proyecto Next.js, así que lo defino como una ruta de API de Next.js. Creo un enrutador tRPC. Eso es inesperado. Eso es muy lento. De acuerdo. De todos modos, estoy escribiendo todos mis procedimientos, tanto consultas como mutaciones, en un solo archivo, y luego no estoy seguro de por qué no se desplaza, pero luego si voy al mismo archivo cuando estaba llamando a la mutación del donante, si me deja. No lo hace. Oh, sí. Funciona. Ahora siempre tengo que desplazarme. De acuerdo. No tengo tiempo para esperar a que VS Code se ponga al día.

Entonces eso fue una descripción general de cómo funciona en BlitzRPC y tRPC. Mi objetivo no era entrar en muchos detalles. Mi objetivo era darte un vistazo de que cosas como tener seguridad de tipo de pila completa y seguridad de tipo de 10 ahora son posibles. Creo que mi computadora se congeló. Así que vamos a terminar. Te daré mi dedo. Sí, creo que mi computadora se está reiniciando. Solo quedan dos diapositivas, así que creo que puedo improvisar. La conclusión de mi charla es que a veces no necesitamos algo completamente nuevo. Podemos revisar cosas del pasado e iterar sobre ellas, podemos mejorarlas, porque la cosa es que RPC tenía muchos problemas hace un tiempo, pero ahora tenemos frameworks como Next.js, como Remix.

7. Revisando RPC y sus Ventajas

Short description:

RPC es una opción natural para la práctica cada vez más ubicua del desarrollo full stack con frameworks como next.js. Telefunk es otra herramienta similar a TRPC y BlitzRPC. Las APIs de RPC, antes consideradas una desventaja debido al acoplamiento estrecho, ahora pueden ser utilizadas a nuestro favor con TypeScript.

Podemos revisar ideas como RPC, y ahora son una combinación perfecta para el ecosistema de JavaScript en cosas como next.js. Tengo esta cita, que en mi opinión es un buen resumen de mi charla. Por lo tanto, RPC es una opción natural para la práctica cada vez más ubicua del desarrollo full stack con frameworks como next.js. Y, por cierto, Telefunk es otra cosa similar a TRPC y BlitzRPC. Así que podemos ver que tenemos un montón de ellas. Tenemos un montón de herramientas que ahora se basan en APIs de RPC porque lo que antes era una desventaja, como el acoplamiento estrecho entre el servidor y el cliente en RPC, ahora puede ser utilizado a nuestro favor. Porque ahora tenemos TypeScript, queremos saber exactamente cuáles son los nombres de los procedimientos, queremos saber exactamente qué parámetros son aceptados por nuestras APIs. Eso es todo.

QnA

Q&A sobre RPC y Soluciones Backend

Short description:

Si tienes alguna pregunta después de esta charla, puedes seguirme en Twitter. Alexandra dice que si escaneas este código QR, te llevará a mi sitio web personal con las diapositivas. También tengo un montón de recursos que utilicé para preparar esta charla. Y si quieres comprar menos regalos, puedes visitar Everybody.gives. Comencemos con una pregunta sencilla de la audiencia. Si alguien nunca ha utilizado RPC, ¿qué les recomendarías probar primero? Así que creo que puedes empezar con tRPC o incluso BlitzRPC. Depende del proyecto que quieras construir. Bien, y aquí hay una pregunta que encaja perfectamente con eso. ¿Cuál sería una solución de RPC fluida cuando el backend utiliza Java o Kotlin como backend de JVM? ¿Y es RPC una solución adecuada para un entorno no monolenguaje? Cuando hablaba de Korba, me refería a este lenguaje de definición de interfaz (IDL). Así que necesitamos algo así. Necesitamos una correspondencia entre lenguajes.

Si tienes alguna pregunta después de esta charla, puedes seguirme en Twitter. Alexandra dice que si escaneas este código QR, te llevará a mi sitio web personal con las diapositivas. También tengo un montón de recursos que utilicé para preparar esta charla. Y si quieres comprar menos regalos, puedes visitar Everybody.gives. Gracias. Muchas gracias, Alexandra. Por favor, toma asiento y tengo algunas preguntas.

De acuerdo. Eso es genial. Sí. Veamos. Muy bien. Genial. Así que felicidades por superar el primer desafío técnico del día. Sí, fue estresante. Sí, pero creo que lo manejaste muy bien. Así que buen trabajo.

Comencemos con una pregunta sencilla de la audiencia. Si alguien nunca ha utilizado RPC, ¿qué les recomendarías probar primero? Supongo, ¿qué biblioteca o qué herramienta, qué enfoque? Bueno, RPC no es una idea tan nueva. Puedes imaginar que cuando llamas a funciones de JavaScript, como las que están en un archivo separado, pero ahora no están en un archivo separado, están en otro lugar, y necesitas este puente del que hablé al principio de mi charla, para poder acceder a ellas. Esa es toda la idea detrás de RPC. Así que creo que puedes empezar con tRPC o incluso BlitzRPC. Depende del proyecto que quieras construir porque BlitzRPC actualmente solo funciona para Next.js. tRPC funciona con Next, Spelt y es independiente del framework. Así que puedes empezar a jugar con tRPC, ver cómo funciona para ti y eso debería ser un buen comienzo para aprender más sobre RPC.

Bien, y creo que aquí hay una pregunta que encaja perfectamente con eso. ¿Cuál sería una solución de RPC fluida cuando el backend utiliza Java o Kotlin como backend de JVM? Y tal vez una pregunta más amplia es si RPC es una solución adecuada para un entorno no monolenguaje. Sí, sí, pero necesitamos tener... Cuando hablaba de Korba, me refería a este lenguaje de definición de interfaz (IDL). Así que necesitamos algo así. Necesitamos una correspondencia entre lenguajes.

Frameworks de RPC y su idoneidad

Short description:

Por ejemplo, existe este framework de RPC, gRPC, que utiliza Protobuf y permite la comunicación entre servidores escritos en diferentes lenguajes. Protobuf contiene toda la información sobre el esquema, los tipos y cómo debe realizarse el mapeo. Cuando tienes múltiples clientes para un solo servidor, usar gRPC o Blitz puede no ser un problema si tienes la misma aplicación con un cliente web y móvil. Sin embargo, BlitzRPC y tRPC no están diseñados para crear APIs consumidas por muchos clientes. Son ideales para frameworks de pila completa como Next.js, donde todo está estrechamente acoplado. La idoneidad de RPC hoy en día está influenciada por la evolución de los lenguajes, los frameworks y el estado actual del ecosistema. Con el surgimiento de frameworks de pila completa como Next.js, Remix, Svelte, Kit y la popularidad de TypeScript, las soluciones de RPC como tRPC y bt-rpc pueden ser reconsideradas. La aparición de entornos de ejecución distribuidos de JavaScript también hace que RPC sea más atractivo, ya que el límite de red se vuelve más rápido, lo que permite modelar las llamadas a funciones de manera más sencilla.

Por ejemplo, existe este framework de RPC, gRPC, que utiliza Protobuf y ese mapeo entre diferentes lenguajes, por lo que puedes usar... Puedes tener comunicación entre servidores escritos en diferentes lenguajes. Y Protobuf contiene toda la información sobre el esquema, los tipos y cómo debe funcionar el mapeo. Entonces, para utilizar Java como backend y algo más como otro backend o como cliente, necesitas tener algo así. Tal vez gRPC sea algo para probar o algo similar. Supongo que esa es la forma de hacerlo.

Bueno. Permíteme hacer la pregunta opuesta, que es cuando tienes múltiples clientes para un solo servidor. La pregunta aquí es si el uso de gRPC o Blitz es un problema cuando tenemos múltiples clientes, por ejemplo, una aplicación móvil nativa y un cliente web. Bueno, si tienes la misma aplicación y tienes una aplicación web y una aplicación móvil, puede que no sea un problema. Pero es cierto que BlitzRPC y tRPC no están diseñados para crear APIs que sean consumidas por muchos clientes. Para ese tipo de cosas tenemos GraphQL, tenemos REST. Y lo que es peor, BlitzRPC y tRPC son ideales para frameworks de pila completa como Next.js, cuando todo está estrechamente acoplado porque eso es lo que también se menciona en la documentación de tRPC, que para bien o para mal, tRPC acopla estrechamente el cliente y el servidor. Sí, creo que, si me permites, la forma en que siempre he pensado en tRPC, está casi en el nombre, es una llamada a procedimiento remoto. Es como si quisieras hacer una llamada a una función, pero hay un límite de red en medio. Y es solo una solución a ese problema y no necesariamente una capa de API para todo. Sí, sí. Sí, genial.

Voy a responder un par de preguntas más de la audiencia, pero quería hacer mi propia pregunta, creo, porque una cosa que diste fue la perspectiva histórica, pasamos por diferentes enfoques, Corba y SOAP y así sucesivamente. Y a veces parece un poco como si lo estuviéramos inventando. Como si siguiéramos, ya sabes, de un cliente FAT a un cliente THIN. Seguimos haciendo RPC a catálogos orientados a servicios, y luego volvemos al anterior. Sí. ¿Son estas solo tendencias y fuerzas? ¿O crees que hay algo que está cambiando en el tipo de entorno o los problemas que estamos tratando de resolver que ahora realmente hace que RPC sea una solución más apropiada hoy que hace tal vez cinco años? Sí, sí. Creo que todavía está relacionado con cómo evolucionan otras cosas. Cómo evolucionan los lenguajes, cómo evolucionan los frameworks alrededor de los lenguajes, porque, ya sabes, con el estado de los frameworks y el estado de JavaScript y TypeScript, no sé, hace 10 años, RPC y, ya sabes, herramientas como tRPC y bt-rpc no tendrían mucho sentido. Pero ahora, dado que tenemos esta evolución en los frameworks de pila completa, como Next.js, Remix, Svelte, Kit y la creciente popularidad de TypeScript, podemos reconsiderar esas cosas. Y creo que esto es por qué seguimos yendo en círculos porque, ya sabes, otras cosas se vuelven populares o se crean otras cosas. Entonces, algunas cosas que alguna vez fueron inadecuadas para el estado actual del ecosistema ahora pueden ser reconsideradas. Interesante. Y ¿crees que el surgimiento de entornos de ejecución distribuidos de JavaScript también hace que RPC sea más atractivo porque de repente el límite de red se vuelve mucho más rápido, ¿verdad? Es más fácil modelar las cosas como una llamada a función.

Desventajas y Mejoras Futuras de las Bibliotecas de RPC

Short description:

RPC se comercializó como tratar los procedimientos remotos como si fueran locales, pero la capa de red y transporte introdujo problemas. Con funciones en el borde, los problemas de red se minimizan, lo que hace que la promesa de tratar las llamadas remotas como locales sea más factible. Las desventajas de las bibliotecas de RPC actuales incluyen el acoplamiento estrecho entre el servidor y el cliente. Las mejoras futuras deben centrarse en habilitar APIs del servidor que puedan ser accedidas por múltiples clientes y crear una herramienta de experiencia de desarrollo que combine las mejores características de Blitz RPC y tRPC.

Sí. Sí, creo que sí. Entonces, um, sí, una de las razones por las que RPC era algo así como odiado o no particularmente apreciado en ese entonces era porque se comercializaba como algo que te permitía tratar los procedimientos remotos exactamente igual que si fueran locales, pero eso era muy defectuoso porque había una red y hacia la, había un montón de problemas a los que te enfrentas cuando hay una red involucrada, cuando hay una capa de transporte involucrada.

Entonces, um, ahora creo que cuando tenemos estas, estas, um, funciones en el borde y cuando limitamos esos problemas con la red, podemos volver a visitar esta promesa. Podemos no ser tan escépticos acerca de esta promesa de tratar las llamadas remotas como si fueran locales, porque en realidad esta parte de la red, uh, la parte de la red es muy mínima. Entonces, los problemas serán mínimos.

Sí. Es casi como si la física estuviera cambiando, ¿verdad? Si puedes llamar a una función remota 60 veces por segundo, de repente, las cosas se vuelven mucho más atractivas. Sí. Genial. Volvamos a las preguntas de la audiencia. Tenemos unos minutos más. Um, así que cada solución tiene sus desventajas. Quien haya mencionado esto, desafortunadamente es cierto. ¿Cuáles son las desventajas del estado actual de las bibliotecas de RPC y en cuáles de ellas deberíamos trabajar para solucionar? Entonces, ¿qué falta todavía en el panorama de, digamos, por ejemplo, RPC en JavaScript o TypeScript en lo que deberíamos trabajar a continuación?

Oh, esa es una buena pregunta. Um, algo que podría faltar es esto. Uh, mencioné antes que TRPC y BlitzRPC acoplan estrechamente el servidor y el cliente. Entonces, tal vez eso es algo en lo que deberíamos trabajar para tener, uh, tener APIs del servidor que puedan ser accedidas por múltiples clientes. Es lo primero de lo que estábamos hablando, uh, hoy. Uh, eso es, eso es una cosa. Y, bueno, todavía espero tener la mejor herramienta de experiencia de desarrollo, porque, para ser honesto, puedo ser bastante parcial aquí porque solía trabajar en Blitz RPC. Pero todavía me gusta la experiencia de desarrollo de Blitz RPC. Me gusta cómo funciona. Hay un compromiso. Como, uh, estas importaciones mágicas, uh, tienen la desventaja de que Blitz se mezcla con Webpack. Pero, pero es una experiencia de desarrollo bastante agradable. Y tRPC funciona de manera ligeramente diferente, es más explícito. Um, así que me encantaría ver una herramienta que lo combine. Que sea agnóstica al framework. Que tenga más de la experiencia de desarrollo de Blitz RPC.

Future Plans and Availability of Demo Code

Short description:

Como última pregunta, se le pregunta al orador sobre sus planes para el futuro. Expresa su entusiasmo por trabajar en APIs y bases de datos. El código de demostración mostrado durante la charla estará disponible en el GitHub del orador. Desafortunadamente, no hay más tiempo para preguntas, ya que el almuerzo está esperando.

Sí. Um, pero, actualmente, no trabajas a tiempo completo en Blitz. Así que, como última pregunta, ¿qué sigue para ti? ¿En qué estás emocionado y en qué te gustaría trabajar? Um, no lo sé. Esa es una pregunta muy honesta. Lo siento. Pensé que iba a ser una pregunta fácil, pero, uh, no, no. Todavía lo estoy descubriendo. Hay muchas cosas que me gustan. Me gusta hablar sobre APIs. Me gustan las bases de datos, así que creo que algo relacionado con eso.

Genial. Y, uh, ¿el código de demostración que acabas de mostrarnos estará disponible en línea? Sí. Sí. Está en mi GitHub. Mi apodo es B-Rose. Sí. Genial. Uso un diario de emojis. Genial. De acuerdo. Desafortunadamente, no tenemos más tiempo para preguntas porque el almuerzo está esperando. Así que digamos gracias a Alexandra y si tienen más preguntas, pueden encontrarla en el puesto de preguntas y respuestas.

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

GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
From GraphQL Zero to GraphQL Hero with RedwoodJS
Top Content
We all love GraphQL, but it can be daunting to get a server up and running and keep your code organized, maintainable, and testable over the long term. No more! Come watch as I go from an empty directory to a fully fledged GraphQL API in minutes flat. Plus, see how easy it is to use and create directives to clean up your code even more. You're gonna love GraphQL even more once you make things Redwood Easy!
Vue.js London Live 2021Vue.js London Live 2021
24 min
Local State and Server Cache: Finding a Balance
Top Content
How many times did you implement the same flow in your application: check, if data is already fetched from the server, if yes - render the data, if not - fetch this data and then render it? I think I've done it more than ten times myself and I've seen the question about this flow more than fifty times. Unfortunately, our go-to state management library, Vuex, doesn't provide any solution for this.For GraphQL-based application, there was an alternative to use Apollo client that provided tools for working with the cache. But what if you use REST? Luckily, now we have a Vue alternative to a react-query library that provides a nice solution for working with server cache. In this talk, I will explain the distinction between local application state and local server cache and do some live coding to show how to work with the latter.
GraphQL Galaxy 2022GraphQL Galaxy 2022
16 min
Step aside resolvers: a new approach to GraphQL execution
Though GraphQL is declarative, resolvers operate field-by-field, layer-by-layer, often resulting in unnecessary work for your business logic even when using techniques such as DataLoader. In this talk, Benjie will introduce his vision for a new general-purpose GraphQL execution strategy whose holistic approach could lead to significant efficiency and scalability gains for all GraphQL APIs.

Workshops on related topic

GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Build with SvelteKit and GraphQL
Top Content
Featured WorkshopFree
Have you ever thought about building something that doesn't require a lot of boilerplate with a tiny bundle size? In this workshop, Scott Spence will go from hello world to covering routing and using endpoints in SvelteKit. You'll set up a backend GraphQL API then use GraphQL queries with SvelteKit to display the GraphQL API data. You'll build a fast secure project that uses SvelteKit's features, then deploy it as a fully static site. This course is for the Svelte curious who haven't had extensive experience with SvelteKit and want a deeper understanding of how to use it in practical applications.

Table of contents:
- Kick-off and Svelte introduction
- Initialise frontend project
- Tour of the SvelteKit skeleton project
- Configure backend project
- Query Data with GraphQL
- Fetching data to the frontend with GraphQL
- Styling
- Svelte directives
- Routing in SvelteKit
- Endpoints in SvelteKit
- Deploying to Netlify
- Navigation
- Mutations in GraphCMS
- Sending GraphQL Mutations via SvelteKit
- Q&A
React Advanced Conference 2022React Advanced Conference 2022
95 min
End-To-End Type Safety with React, GraphQL & Prisma
Featured WorkshopFree
In this workshop, you will get a first-hand look at what end-to-end type safety is and why it is important. To accomplish this, you’ll be building a GraphQL API using modern, relevant tools which will be consumed by a React client.
Prerequisites: - Node.js installed on your machine (12.2.X / 14.X)- It is recommended (but not required) to use VS Code for the practical tasks- An IDE installed (VSCode recommended)- (Good to have)*A basic understanding of Node.js, React, and TypeScript
GraphQL Galaxy 2022GraphQL Galaxy 2022
112 min
GraphQL for React Developers
Featured Workshop
There are many advantages to using GraphQL as a datasource for frontend development, compared to REST APIs. We developers in example need to write a lot of imperative code to retrieve data to display in our applications and handle state. With GraphQL you cannot only decrease the amount of code needed around data fetching and state-management you'll also get increased flexibility, better performance and most of all an improved developer experience. In this workshop you'll learn how GraphQL can improve your work as a frontend developer and how to handle GraphQL in your frontend React application.
React Summit 2022React Summit 2022
173 min
Build a Headless WordPress App with Next.js and WPGraphQL
Top Content
WorkshopFree
In this workshop, you’ll learn how to build a Next.js app that uses Apollo Client to fetch data from a headless WordPress backend and use it to render the pages of your app. You’ll learn when you should consider a headless WordPress architecture, how to turn a WordPress backend into a GraphQL server, how to compose queries using the GraphiQL IDE, how to colocate GraphQL fragments with your components, and more.
GraphQL Galaxy 2020GraphQL Galaxy 2020
106 min
Relational Database Modeling for GraphQL
Top Content
WorkshopFree
In this workshop we'll dig deeper into data modeling. We'll start with a discussion about various database types and how they map to GraphQL. Once that groundwork is laid out, the focus will shift to specific types of databases and how to build data models that work best for GraphQL within various scenarios.
Table of contentsPart 1 - Hour 1      a. Relational Database Data Modeling      b. Comparing Relational and NoSQL Databases      c. GraphQL with the Database in mindPart 2 - Hour 2      a. Designing Relational Data Models      b. Relationship, Building MultijoinsTables      c. GraphQL & Relational Data Modeling Query Complexities
Prerequisites      a. Data modeling tool. The trainer will be using dbdiagram      b. Postgres, albeit no need to install this locally, as I'll be using a Postgres Dicker image, from Docker Hub for all examples      c. Hasura
GraphQL Galaxy 2021GraphQL Galaxy 2021
48 min
Building GraphQL APIs on top of Ethereum with The Graph
WorkshopFree
The Graph is an indexing protocol for querying networks like Ethereum, IPFS, and other blockchains. Anyone can build and publish open APIs, called subgraphs, making data easily accessible.

In this workshop you’ll learn how to build a subgraph that indexes NFT blockchain data from the Foundation smart contract. We’ll deploy the API, and learn how to perform queries to retrieve data using various types of data access patterns, implementing filters and sorting.

By the end of the workshop, you should understand how to build and deploy performant APIs to The Graph to index data from any smart contract deployed to Ethereum.