A esta altura, espero que você tenha tido a chance de ver o meu tutorial anterior intitulado, Uso do GraphQL com Golang e um banco de dados NoSQLque é mais ou menos um início rápido para usar o GraphQL com Couchbase. Lá, vimos como criar um esquema GraphQL que permitia consultas somente leitura e mutações nos dados. No entanto, as consultas não foram projetadas de forma eficiente em torno de possíveis relacionamentos de dados.

Veremos como lidar e definir relacionamentos entre modelos de dados usando GraphQLCouchbase e a linguagem de programação Go.

No exemplo anterior, criamos dois objetos GraphQL relacionados a contas e blogs que se pareciam com o seguinte:

No exemplo acima, presumimos que o conta no campo blogType era uma chave para o objeto accountType objeto. Ao fazer isso, conseguimos executar consultas como as seguintes:

A abordagem acima funciona, mas temos que continuar passando variáveis em nosso Consulta GraphQL.

Muito bem, o esquema não tem nada a ver com a consulta acima. O objeto de consulta é responsável pelo desempenho da consulta, não o esquema em si.

Lembre-se de que definimos consultas que utilizaram o Couchbase da seguinte forma:

Onde quero chegar com isso?

Em vez de criar consultas para cada interação que desejamos realizar, é mais fácil incorporá-las ao modelo GraphQL. Em outras palavras, em vez de fazer referência a modelos por uma chave de cadeia de caracteres, por que não fazer referência a outro modelo?

Faça a seguinte modificação no blogType objeto:

Ainda estamos definindo cada um de nossos possíveis campos de API, mas também estamos definindo um Resolver para a função conta campo. Dentro do Resolver podemos obter os dados do objeto pai, sendo a função blogType e usá-lo para consultar os dados da conta quando solicitado.

A consulta GraphQL que vimos anteriormente pode se tornar a seguinte:

A consulta acima pode não ter exatamente o mesmo significado que a anterior, mas, neste exemplo, ela tem. Estamos dizendo que queremos obter um blog específico por conta. Em vez de fornecer o ID da conta, podemos simplesmente obter as informações por meio da consulta Resolver que havíamos criado.

Essa abordagem torna as consultas desnecessárias? Não, não torna, porque pode haver necessidade de fazer consultas de diferentes maneiras. No entanto, ela nos permitiu fazer um tipo de JUNTAR com o GraphQL.

O Couchbase tem N1QL, portanto, um JUNTAR Seria melhor que a operação do GraphQL fosse feita por meio do banco de dados e não no backend? Quero dizer, mesmo que tenhamos criado relacionamentos NoSQL com o GraphQL, ainda estamos fazendo várias solicitações ao banco de dados. Eu diria que seria melhor para o GraphQL fazer o JOIN no nível do banco de dados, não no nível do aplicativo. Quanto menos solicitações, mais rápido será o aplicativo, certo?

Vamos modificar o blogs em nossa consulta rootQuery objeto:

Em vez de adicionar um Resolver para a função contas no campo blogType estamos fazendo tudo isso por meio da consulta. Nosso blogType seria parecido com o seguinte:

Se quiséssemos escrever uma consulta para isso, poderíamos fazer isso facilmente, como a seguir:

A consulta acima retornaria todos os blogs e os dados da conta associados a eles. Em vez de fazer uma consulta para cada campo, estamos fazendo isso em uma única solicitação com o N1QL.

O Couchbase N1QL torna essa abordagem mais plausível do que um banco de dados relacional, pois o esquema flexível pode ser facilmente modelado com o GraphQL.

Conclusão

Você acabou de ver como trabalhar com tipos de dados relacionados em um aplicativo Golang que usa GraphQL e o banco de dados NoSQL, Couchbase. Com as relações GraphQL, você pode criar Resolver para cada campo do modelo ou você pode criar consultas mais complicadas com o N1QL e deixar que o banco de dados faça o trabalho pesado. Em ambos os cenários, o usuário pode solicitar exatamente o que deseja sem ter que se preocupar com uma quantidade potencialmente excessiva de endpoints de API.

Eu o encorajo a dar uma olhada no meu exemplo anterior pois ele é mais aprofundado no que diz respeito ao GraphQL com tipos de dados Golang e Couchbase. Você pode até mesmo ir além e ver outro exemplo que escrevi intitulado, Primeiros passos com o GraphQL usando Golang.

Para saber mais sobre relacionamentos de dados e sobre como usar o Couchbase com Go, confira o artigo Portal do desenvolvedor do Couchbase.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta