Buenas prácticas y tutoriales

Relaciones de datos - GraphQL y NoSQL en una aplicación Golang

A estas alturas espero que ya hayas tenido la oportunidad de echar un vistazo a mi anterior tutorial titulado, Uso de GraphQL con Golang y una base de datos NoSQLque es más o menos una guía rápida para utilizar GraphQL con Couchbase. Allí vimos cómo crear un esquema GraphQL que permitía consultas de sólo lectura y mutaciones contra los datos. Sin embargo, las consultas no se diseñaron de forma eficiente en torno a las posibles relaciones entre los datos.

Vamos a ver cómo manejar y definir relaciones entre modelos de datos utilizando GraphQLCouchbase y el lenguaje de programación Go.

En el ejemplo anterior habíamos creado dos objetos GraphQL en torno a cuentas y blogs con el siguiente aspecto:

En el ejemplo anterior, habíamos supuesto que el cuenta en el campo blogTipo era una clave para el accountType objeto. De este modo pudimos ejecutar consultas como las siguientes:

El enfoque anterior funciona, pero tenemos que seguir pasando variables en nuestro Consulta GraphQL.

De acuerdo, el esquema en realidad no tiene nada que ver con la consulta anterior. El objeto de consulta es responsable de cómo se realiza la consulta, no el esquema en sí.

Recuerda que habíamos definido consultas que aprovechaban Couchbase como las siguientes:

¿Adónde quiero llegar?

En lugar de crear consultas para cada interacción que queramos realizar, es más fácil incorporarlas al modelo GraphQL. En otras palabras, en lugar de hacer referencia a los modelos por una clave de cadena, ¿por qué no hacer referencia a otro modelo?

Realice la siguiente modificación en el blogTipo objeto:

Seguimos definiendo cada uno de nuestros posibles campos API, pero también definimos un campo Resolver para la función cuenta campo. Dentro del Resolver podemos obtener los datos del objeto padre, siendo la función blogTipo y utilizarlo para consultar los datos de la cuenta cuando se soliciten.

La consulta GraphQL que vimos anteriormente puede convertirse en lo siguiente:

De acuerdo, puede que la consulta anterior no tenga exactamente el mismo significado que la anterior, pero para este ejemplo sí lo tiene. Estamos diciendo que queremos obtener un blog en particular por cuenta. En lugar de proporcionar el id de la cuenta, podemos obtener la información a través de que Resolver que habíamos creado.

¿Este enfoque hace innecesarias las consultas? No, no lo hace porque puede ser necesario realizar consultas de diferentes maneras. Sin embargo, nos permite hacer un tipo de ÚNASE A con GraphQL.

Couchbase tiene N1QL, por lo que no sería un ÚNASE A sería mejor a través de la base de datos y no en el backend? Es decir, aunque hayamos creado relaciones NoSQL con GraphQL, seguimos haciendo numerosas peticiones contra la base de datos. Yo diría que sería mejor para GraphQL hacer JOIN a nivel de base de datos, no a nivel de aplicación. Cuantas menos peticiones, más rápida será la aplicación, ¿no?

Modifiquemos el blogs en nuestra rootQuery objeto:

En lugar de añadir un Resolver a la función cuentas en el campo blogTipo lo hacemos todo a través de la consulta. Nuestro blogTipo tendría el siguiente aspecto:

Si quisiéramos escribir una consulta para esto, podríamos hacerlo fácilmente como la siguiente:

La consulta anterior devolvería todos los blogs y los datos de cuenta asociados a ellos. En lugar de hacer una consulta para cada campo, lo hacemos en una sola petición con N1QL.

Couchbase N1QL hace este enfoque más plausible que una base de datos relacional como el esquema flexible que puede ser fácilmente modelado con GraphQL.

Conclusión

Acabas de ver cómo trabajar con tipos de datos relacionados en una aplicación Golang que utiliza GraphQL y la base de datos NoSQL, Couchbase. Con las relaciones GraphQL, puedes crear Resolver para cada campo del modelo o puede crear consultas más complicadas con N1QL y dejar que la base de datos haga el trabajo pesado. En ambos escenarios, el usuario puede solicitar exactamente lo que desea sin tener que preocuparse por una cantidad potencialmente excesiva de puntos finales de API.

Le animo a que consulte mi ejemplo anterior ya que tiene más profundidad cuando se trata de GraphQL con tipos de datos Golang y Couchbase. Usted puede incluso llevarlo más lejos y ver otro ejemplo que escribí titulado, Primeros pasos con GraphQL usando Golang.

Para obtener más información sobre las relaciones de datos y el uso de Couchbase con Go, consulte el artículo Portal para desarrolladores de Couchbase.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.