Como, ¿qué es lo que nos gusta de
GraphQL y que queremos en el back-end? Y probablemente eso sea el esquema y el lenguaje de consulta. Entonces, ¿sabes qué podemos hacer con eso? Así que lo pensamos y pensamos que esos back-ends realmente tienen algo de sentido y a veces incluso tienen esquemas, aunque no sean de
GraphQL. En el pasado creamos una biblioteca llamada solfa que tomaba un concepto similar en el que tomábamos un servidor
GraphQL existente y generábamos endpoints completos de servidor REST y OpenAPI a partir de él para servir a terceros o a otras aplicaciones que no conocen
GraphQL. Así que pensamos que tal vez para resolver esos problemas podemos hacerlo al revés. Tal vez podamos tomar esos servicios, obtener sus esquemas, ya sea si están definidos como gRPC o OpenAPI, o tal vez simplemente podemos mirar los registros de sus respuestas y generar esquemas a partir de ahí, convertir cada uno de esos esquemas en
GraphQL y luego incluso fusionar en un único punto final de
GraphQL en el que básicamente podemos consultar todas nuestras fuentes que necesitamos cuando estamos en nuestros resolvers. Y lo que hemos hecho aquí es básicamente si hacemos eso, podemos aprovechar al máximo
GraphQL utilizando todos los servicios existentes que tenemos hoy sin necesidad de cambiarlos o tocarlos o que siquiera sepan qué es
GraphQL. Y eso es
GraphQL Mesh. Así que
GraphQL Mesh toma todas esas diferentes fuentes, hay muchas de ellas, y genera un SDK de
GraphQL completamente tipado que se puede ejecutar en cualquier lugar. Básicamente, toma todas esas fuentes y las fusiona en una sola. Veamos un ejemplo. Este es un ejemplo simple en el que tenemos dos API públicas, una de ciudades, que es una API REST con Swagger, y otra de clima, que también es una API pública de Swagger. Así que simplemente definiendo estas dos en nuestra configuración de mesh, podemos comenzar a consultarlas como si fuera
GraphQL. Eso es todo. Y esos son solo los puntos finales existentes, tenemos documentación completa,
GraphQL, todo. Pero ahí no es donde queremos detenernos. También queremos fusionarlos. Así que podemos agregar un nuevo campo llamado pronósticos diarios en una ciudad. Y en esas funciones que los conectamos a ambos, esta función está completamente tipada porque generamos SDK a partir de ella. Así que ahora, simplemente definiendo este campo, podemos comenzar a consultar no solo la ciudad de Tel Aviv, sino también el pronóstico allí. Y lo que hemos hecho aquí es básicamente la unión de esquemas, no solo en
GraphQL, sino en cualquier fuente, lo cual es extremadamente poderoso. Podemos hacer la unión de esquemas entre OData y gRPC. Podemos hacer la unión de esquemas entre
GraphQL y
GraphQL Federation. Y hay muchas, muchas fuentes que ya se han creado y hay más por venir. Así que OpenAPI y Swagger, gRPC,
GraphQL Federation, servicios federados y
GraphQL regular, SQL y más. Así que simplemente al tratar de resolver el problema de tener seguridad de tipos completa en nuestros resolvers, básicamente resolvimos un problema mucho más grande. Ahora,
GraphQL Mesh tiene mucho más en su interior. Esas fusiones que te mostré con stitching, por cierto, tomamos el control de la unión de esquemas, lo mejoramos y lanzamos nuevas versiones para hacerla sin deprecación. Pero también puedes usar Federation para hacer esas fusiones. Y más que eso, tenemos una oportunidad, tenemos una forma para que tomes servicios existentes e incluso servicios de Swagger y agregar metadatos federados en ellos, y luego federar servicios que no son federados en absoluto.