Entonces, lo que hace SOFA es tomar el esquema, genera automáticamente llamadas REST que son similares a lo que acabamos de hablar, lo que hace Mesh. Y mira los tipos y genera las posibles consultas, como la consulta anterior, todos los diferentes campos de un tipo y simplemente genera una API RESTful. Entonces, para cada tipo, obtienes un punto final que consulta todos los diferentes campos. Eso lo hace automáticamente. Solo una línea de código y obtienes la API REST sobre tu API GraphQL existente. La razón por la que quieres hacerlo es porque, la razón por la que lo creamos fue porque trabajábamos con una gran aerolínea y las partes web se movieron a GraphQL, pero las partes móviles pensaron que GraphQL simplemente no era interesante en absoluto. Pero aún queríamos mantener una única puerta de enlace. Básicamente, expusimos REST para los temas móviles sin que ellos supieran que en realidad estaban utilizando GraphQL. Y lo más genial de esto fue cuando querían personalizar, como una cosa que sucede cuando tratas con REST y estos temas vienen y dicen: `Oye, ¿podrías personalizar, podrías cambiar el punto final o darme un nuevo punto final para darme un poco de estos datos y un poco de esos datos?`. Entonces, lo que hicimos fue simplemente crear una nueva URL y adjuntar una consulta a ella. Y eso es todo, obtienes un nuevo punto final personalizado. Así que, en lugar de tardar una semana entera en crear un nuevo punto final, ahora solo toma cinco minutos. Eso es lo que hace SOFA, básicamente es lo contrario, convierte GraphQL en REST. Este juego de ajustar REST a todas las diferentes fuentes es muy interesante para nosotros. Aprendimos mucho sobre otros protocolos, como OData, que es un protocolo muy interesante. Entonces, JSON schema, hay muchos protocolos interesantes y jugar con ellos realmente te da una perspectiva diferente de lo que es posible y sí, espero que responda la pregunta. Genial. ¿Cuáles son las capacidades de caché de Mesh? Creo que acabo de responder a la pregunta de Liron. También compartí el enlace en Medium. Entonces, puedes verlo, básicamente puedes configurar qué campos, como puedes configurar las claves de caché. Puedes invalidarla, puedes usar TTL, sí, hay muchas, muchas opciones diferentes allí. Hay muchas opciones, me gustaría, sería genial si pudieras echarle un vistazo y decirnos si nos perdimos algunas capacidades o algo en la caché que puedas necesitar. Pero básicamente la idea es que hoy en día, Meshed también se utiliza como una puerta de enlace completa con muchos de nuestros clientes, por lo que es necesario admitir todo eso. Nuevamente, al comienzo de la masterclass, acabamos de comenzar a usar Meshed como un SDK, como una mejor fuente de datos de Apollo, pero también se ejecuta como una puerta de enlace completa con todas las capacidades de caché. Y en realidad, incluso puedes definir esas cosas de caché incluso si generas un SDK, pero sí, espero que responda la pregunta.
De nuevo, tenemos, creo que incluso todavía quedan dos horas para pasar por todos esos pasos, así que quiero más preguntas. Si tengo una pregunta. Sí. Bueno, quiero usar un GraphQL Mesh, pero el problema es así. Los servicios detrás de él, como puedo tener alguna API REST y algunos otros GraphQL y tal vez una base de datos. Todos devuelven el mismo esquema. Necesito un discriminante en el lado del cliente, como digamos un ID de inquilino, y la lógica me dará algo así como, si tienes este ID de inquilino, te redirigiré al uno de GraphQL. Si este es el ID de inquilino GraphQL dos o REST tres o directamente a la base de datos. ¿Es esto posible? ¿Cómo lo hago? Porque necesito exactamente la misma consulta y todos ellos deben tener el mismo esquema exacto, pero hay tres servicios y cada servicio es para un inquilino diferente. Entiendo. Y la pregunta es, ¿quieres exponerlo al cliente como un solo esquema o como esquemas... Sí, no, no, no. Necesito un solo esquema, por lo que el cliente no necesita saber que ha sido redirigido. Simplemente algo en su autenticación o algo detrás de escena que dice, oh, eres este inquilino, así que irás allí. No importa lo que quieras o lo que sepas, nunca verás los otros. Sí, sí, sí. Esa es una muy buena pregunta. En primer lugar, la razón por la que pregunto si quieres exponerlos de manera diferente es porque muchas veces hay conflictos entre las diferentes fuentes. Y luego la pregunta es qué hacer. Y todo es posible. Es solo una cuestión de lo que prefieras. Por ejemplo, lo que compartí fue que puedes usar transformaciones personalizadas y las transformaciones pueden hacer cualquier cosa. Por ejemplo, puedes agregar un prefijo a cada uno de esos y luego tienes... Aunque hay conflictos, es básicamente como espacios de nombres o algo así. Pero eso funciona para algunos casos de uso, pero para tu caso, no es así. Pero solo menciono que es posible para otros. En tu caso, lo que quieres es básicamente algo que se ejecute delante de todos ellos, como un middleware o algo así que luego los redirija a la fuente correcta. Entonces hay algunas formas de hacerlo. Sugeriría mirar la composición de resolvers, básicamente puedes definir algunas funciones o es como un middleware que se ejecuta delante de todos ellos. Y como se ejecuta cada vez antes de que se llame a cada Resolver, puedes ejecutar cualquier llamada arbitraria allí. Entonces, básicamente puedes escribir algún código que tome del contexto, básicamente el SDK correcto o la fuente correcta y simplemente pase la consulta a esa fuente. Entonces sí, definitivamente es posible. Si necesitas más ayuda con eso, como incluso puedo hacer una reproducción o un ejemplo, puedo entrar y hacer algunas PR si no puedes resolverlo, pero definitivamente es posible.
De acuerdo, entonces, ¿esto es posible con GraphQL Mesh? ¿Puedo configurarlo con, qué necesitaría poner en GraphQL Mesh para decirle que use este discriminante y simplemente elija una fuente? Entonces, lo que imagino que estás haciendo y creo que puedes comenzar a hacerlo, digamos en GitHub y puedo unirme y ayudarte si te quedas atascado, es que primero pondría en Mesh todas esas tres fuentes. Generaría el esquema y luego usaría la composición de resolvers para decirle a Mesh qué SDK usar para cada consulta. Es un poco complicado, no es muy sencillo, así que en realidad sería genial si puedes, no sé si puedes, si tienes la opción, si puedes crear una reproducción simple, como una aplicación simple que haga algo similar y luego puedo ayudarte a hacer eso. De acuerdo, gracias, intentaré ver si puedo hacer algo. Sí, por cierto, compartiré mi GitHub para que las personas, en mi Git, en mi GitHub, también está mi correo electrónico privado. Entonces, si quieres contactarme o si quieres, y por supuesto, siempre puedes abrir un problema en el repositorio de GraphQL Mesh, pero sí, lo comparto en caso de que alguien quiera. De acuerdo, gracias. Sí, de nada, más preguntas si tienes. De acuerdo, daré un minuto más para que la gente haga preguntas y luego podemos comenzar a pasar por los pasos. Nuevamente, puedes comenzar a hacer esos pasos ahora mismo, simplemente clona el repositorio y hazlo. Estoy compartiendo, pero por favor sigue haciendo preguntas. Quiero que sigas haciendo preguntas. Eso es mejor para mí. De acuerdo, así que lo que tengo aquí. De acuerdo, así que lo que tengo aquí es básicamente el primer paso, si clonas el repositorio y luego revisas este commit, este primer commit, eso es donde quiero que estés. Ahora y quiero que luego, ahora clónalo, revisa estos pasos, luego ejecuta yarn para instalar todo y ejecuta yarn start para ejecutar esto. Ahora hazlo de nuevo. Y solo para pasar rápidamente por la configuración. Y nuevamente, si esto es, digamos, nunca has ejecutado un servidor GraphQL antes y no entiendes lo que está sucediendo aquí, dime, por favor, detenme y haz preguntas, no hay preguntas tontas en absoluto aquí. Entonces, lo que estoy haciendo aquí es que instalé básicamente Apollo Server, que por cierto, solo mencionaré, estoy usando Apollo Server aquí porque es la opción más popular, pero no es la mejor opción, en mi opinión. Entonces, si estás usando Node, digamos, y quieres construir un servidor GraphQL, deberías mirar, déjame mostrarte dónde... Por cierto, ahora voy a graphql.org. Hemos reconstruido graphql.org, lo hemos construido en Gatsby ahora y cambiamos las secciones de código. Ahora está mucho más organizado y puedes ver que se organiza por lenguajes, por lo que si vas a JavaScript, tenemos la implementación del servidor, las bibliotecas de cliente y las herramientas. Y también los ordenamos por su popularidad y cómo se mantienen, y cosas así. Entonces, Apollo Server es una de las opciones más populares. Pero en mi opinión, actualmente la mejor... Pero no se mantiene bien, para ser honesto. Las dependencias son muy antiguas y hay toneladas de problemas, problemas abiertos y PR abiertas, y simplemente no están muy activos allí. Pero en mi opinión, la mejor opción actualmente es esta, GraphQL Helix. Compartiré el enlace contigo, aunque puedes encontrarlo tú mismo.
Comments