Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Crie rapidamente uma GraphQL API de alto desempenho para o MongoDB com Hasura

Praveen Durairaju9 min read • Published Feb 15, 2024 • Updated Feb 15, 2024
GraphQLAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

Em 2012, o GraphQL foi apresentado como uma especificação de API amigável ao desenvolvedor que permite que os clientes solicitem exatamente os dados de que precisam, tornando-os eficientes e rápidos. Ao reduzir a necessidade de múltiplas solicitações e limitar a busca excessiva de dados, o GraphQL simplifica a recuperação de dados, melhorando a experiência do desenvolvedor. Isso leva a melhores aplicativos, garantindo um carregamento de dados mais eficiente e menos uso da largura de banda, o que é particularmente importante para ambientes móveis ou de baixa largura de banda.
Usar GraphQL — em vez de REST — no MongoDB é desejável para muitos casos de uso, especialmente quando há necessidade de consultar simultaneamente dados de várias instâncias do MongoDB, ou quando os engenheiros precisam unir dados NoSQL do MongoDB com dados de outra fonte.
No entanto, os engenheiros muitas vezes enfrentam desafios para implementar APIs GraphQL e colocá-los em camadas em suas fontes de dados do MongoDB. Muitas vezes, essa curva de aprendizado e a sobrecarga de manutenção inibem a adoção. O Hasura foi projetado para resolver esse desafio comum com a implementação do GraphQL.
Hasura é uma solução de API do GraphQL de código baixo. Com o Hasura, até mesmo engenheiros que não estão familiarizados com o GraphQL podem criar APIs GraphQL ricas em recursos - completas com paginação, filtragem, classificação etc. - no MongoDB e em dezenas de outras fontes de dados em minutos. O Hasura também oferece suporte à federação de dados, permitindo que os desenvolvedores criem uma GraphQL API unificada em diferentes bancos de dados e serviços. Neste guia, mostraremos como conectar rapidamente o Hasura ao MongoDB e gerar uma API GraphQL segura e de alto desempenho.
Orientaremos você pelas etapas para:
  • Crie um projeto no Hasura Cloud.
  • Crie um banco de dados no MongoDB Atlas.
  • Conecte o Hasura ao MongoDB.
  • Gere uma GraphQL API de alto desempenho instantaneamente.
  • Experimente queries do GraphQL com relacionamentos.
  • Analise a execução da query.
Também veremos como e por que a API gerada tem alto desempenho.
No final deste guia, você poderá criar sua própria API GraphQL de alto desempenho e pronta para produção com o Hasura para sua instância existente ou nova do MongoDB Atlas.

Guia para conectar o Hasura ao MongoDB

Você precisará de um projeto no Hasura Cloud e de um MongoDB database no Atlas para começar com as próximas etapas.

Criar um projeto no Hasura Cloud

Acesse cloud.hasura.io para criar uma conta ou fazer login. Quando estiver no Cloud Dashboard, navegue até Projetos e crie um novo projeto clicando em New Project.
Crie um novo projeto no Hasura Cloud
Você pode criar um projeto gratuito selecionando a região de sua escolha. Neste exemplo, estou usando a infraestrutura AWS, região Oeste dos EUA.
Lembre-se da região escolhida, pois queremos co-localizar a API GraphQL implantada usando o Hasura Cloud na mesma região que o banco de dados no MongoDB Atlas. Isso será feito em uma das etapas subsequentes. Clique no botãoCreate Free Projectconforme destacado. Como sempre, você pode atualizar o projeto posteriormente, conforme necessário.
Botão Criar projeto gratuito na Hasura Cloud
Depois que o projeto for criado, você será levado à página de detalhes do projeto, que exibe o ponto de extremidade GraphQL, entre outros detalhes. Observe o Hasura Cloud IP nessa página, pois ele é necessário durante a configuração do MongoDB Atlas para permitir a conexão do Hasura com o MongoDB.
Lançamento do Console Hasura Cloud
Clique em Launch Console para abrir o Console Hasura do projeto. Você chegará à página API Explorer do console, onde poderá experimentar as APIs GraphQL.
Aba DATA dentro do Console Hasura
Clique na abaDATA na parte superior para navegar até a seção Gerenciamento de Dados do console. Aqui você pode se conectar aos vários bancos de dados suportados pelo Hasura. Escolha MongoDB na lista e clique em Connect Existing Database.
Conecte seu primeiro banco de dados Hasura Console
Neste ponto, Hasura requer os detalhes de conexão do MongoDB.
Se você já tem uma instância MongoDB existente, fique à vontade para experimentar a demonstração com isso.
Para este tutorial, primeiro crie uma nova instância do MongoDB. Mas você pode pular esta etapa se já tiver um banco de dados.

Criar um banco de dados no MongoDB Atlas

A Hasura pode se conectar a um banco de dados MongoDB Atlas novo ou existente e gerar a API GraphQL para você. Agora, Go e crie um novo banco de dados e use alguns dados de amostra gerados automaticamente.
Vá para MongoDB Atlas, crie um projeto se você não tiver um e navegue até a páginaDatabase na seção Sistemas. Você deverá ver uma página como a abaixo:
Construa um botão de banco de dados Mongo Atlas
Clique no botãoBuild a Database. Na próxima página, você selecionará os detalhes da implementação.
Para simplificar, comece com o cluster Free M0 , que é gratuito para sempre e ótimo para começar. Você sempre pode atualizar mais tarde, quando necessário.
Implemente seu banco de dados com M0 Cluster Gratuito
Dê um nome para o cluster; para este exemplo, use Hasura. Você precisará selecionar a região. Para este tutorial, escolha Amazon Web Services como fornecedor e escolha a regiãous-west-2para manter os dados próximos à instância do Hasura (lembre-se de que nosso cluster do Hasura também foi implantado no Oeste dos EUA).
Escolher fornecedor de região do banco de dados
Lembre-se de escolher a região mais próxima dos seus usuários.
Dica: é recomendável manter o banco de dados e a região da API iguais para evitar problemas de desempenho e latência.
Na próxima etapa, adicione seu endereço IP para conectividade local e crie um novo usuário de banco de dados com a permissãoatlasAdminnecessária para acessar o cluster do MongoDB a partir do Hasura Cloud.
Conectar-se ao cluster de banco de dados Mongo Atlas
Anote a senha, pois precisaremos dela em uma etapa posterior.
Agora, clique em Create Database User. Clique emChoose a connection method e pule as próximas etapas.
Opcionalmente, você pode consultar as instruções para criar uma nova implantação do banco de dados MongoDB nos Docs, especialmente até a etapa 4, caso você esteja preso em qualquer uma das etapas acima.

Carregar conjunto de dados de amostra

Quando a implementação do banco de dados estiver concluída, talvez você queira carregar alguns dados de amostra para o cluster. Para isso, vá até a guia Databasee, no Cluster recém-criado, clique no... que se abre com uma opção para Load Sample Dataset. Isso pode levar alguns segundos.
Carregar conjunto de dados de amostra
Checkpoint: nesta etapa, criamos um projeto no Hasura Cloud e um banco de dados no MongoDB Atlas.

Conecte o Hasura ao MongoDB

Para conectar o Hasura ao MongoDB, primeiro adicione o endereço IP do Hasura Cloud ao cluster MongoDB. Para fazer isso, navegue até a página Acesso à Rede (em Segurança) no dashboard do Atlas.
Adicionar endereço IP em Acesso à rede
Clique em ADD IP ADDRESS e insira o Hasura Cloud IP que você obteve do dashboard do Hasura Cloud na primeira etapa.
Adicionar entrada da lista de acesso IP
Depois disso, o Hasura Cloud deverá ser capaz de se comunicar com a instância do MongoDB Atlas. A próxima etapa é obter a string de conexão do banco de dados.
No painel do Atlas, vá até a páginaDatabase e clique em Connect ao lado do cluster Hasura criado algumas etapas atrás. Você terá as seguintes opções — escolha a opçãoDrivers.
Conecte-se ao seu aplicativo
Você receberá um pop-up com os detalhes da string de conexão. Copie a cadeia de conexão para o banco de dados, que será semelhante a este formato:
1mongodb+srv://praveen:<password>@hasura.1oyflxi.mongodb.net/?retryWrites=true&w=majority
Observe que você precisa substituir <password> pela senha real do usuário do banco de dados que você criou anteriormente.
Você pode acessar os Usuários do banco de dados na guia Acesso ao banco de dados, na seção Segurança do menu de navegação à esquerda. Lembre-se de que o usuário do banco de dados precisa ter permissãoatlasAdminpara que a conexão funcione.
Agora, vá para o dashboard do Hasura Cloud para a próxima etapa.
Como você está na página Connect Existing Database for MongoDB (Conectar banco de dados existente para MongoDB), digite os valores para o nome do banco de dados como mongodb, a string de conexão copiada da etapa anterior.
Esta instância vem com um banco de dados de amostra chamado sample_mflix. Insira isso na configuraçãododb .
Conectar MongoDB database no Console Hasura
Finalmente, clique em Connect Database e está tudo pronto com a conexão do Hasura e do MongoDB, todos hospedados em suas respectivas instâncias do Cloud.

Gere uma API GraphQL de alto desempenho

Essa é a parte emocionante do guia. 😀
Para o banco de dados de amostra que foi carregado no MongoDB, você pode gerar uma API instantaneamente.
Acesse a página mongodb -> Gerenciar no Console do Hasura.
Collections não monitoradas do banco de dados de amostra
Confira as collections do banco de dados de exemplo mostrado nesta página. Por exemplo, você pode ver collections como users, theaters, movies, comments, sessionse embedded_movies. Agora você pode Track -los para garantir que Hasura gere a API GraphQL (e REST) para as coleções.
Comece rastreando a coleçãomovies. Clique no botãoTrackao lado da coleçãomovies.
Nesta etapa, você precisará indicar ao Hasura qual é a estrutura do objeto JSON para que o Hasura possa introspecção e gerar um esquema GraphQL para isso.
Insira o seguinte JSON como entrada:
1{
2 "_id": {
3 "$oid": "573a1390f29313caabcd42e8"
4 },
5 "plot": "A group of bandits stage a brazen train hold-up, only to find a determined posse hot on their heels.",
6 "genres": [
7 "Short",
8 "Western"
9 ],
10 "runtime": {
11 "$numberInt": "11"
12 },
13 "cast": [
14 "A.C. Abadie",
15 "Gilbert M. 'Broncho Billy' Anderson",
16 "George Barnes",
17 "Justus D. Barnes"
18 ],
19 "poster": "https://m.media-amazon.com/images/M/MV5BMTU3NjE5NzYtYTYyNS00MDVmLWIwYjgtMmYwYWIxZDYyNzU2XkEyXkFqcGdeQXVyNzQzNzQxNzI@._V1_SY1000_SX677_AL_.jpg",
20 "title": "The Great Train Robbery",
21 "fullplot": "Among the earliest existing films in American cinema - notable as the first film that presented a narrative story to tell - it depicts a group of cowboy outlaws who hold up a train and rob the passengers. They are then pursued by a Sheriff's posse. Several scenes have color included - all hand tinted.",
22 "languages": [
23 "English"
24 ],
25 "released": {
26 "$date": {
27 "$numberLong": "-2085523200000"
28 }
29 },
30 "directors": [
31 "Edwin S. Porter"
32 ],
33 "rated": "TV-G",
34 "awards": {
35 "wins": {
36 "$numberInt": "1"
37 },
38 "nominations": {
39 "$numberInt": "0"
40 },
41 "text": "1 win."
42 },
43 "lastupdated": "2015-08-13 00:27:59.177000000",
44 "year": {
45 "$numberInt": "1903"
46 },
47 "imdb": {
48 "rating": {
49 "$numberDouble": "7.4"
50 },
51 "votes": {
52 "$numberInt": "9847"
53 },
54 "id": {
55 "$numberInt": "439"
56 }
57 },
58 "countries": [
59 "USA"
60 ],
61 "type": "movie",
62 "tomatoes": {
63 "viewer": {
64 "rating": {
65 "$numberDouble": "3.7"
66 },
67 "numReviews": {
68 "$numberInt": "2559"
69 },
70 "meter": {
71 "$numberInt": "75"
72 }
73 },
74 "fresh": {
75 "$numberInt": "6"
76 },
77 "critic": {
78 "rating": {
79 "$numberDouble": "7.6"
80 },
81 "numReviews": {
82 "$numberInt": "6"
83 },
84 "meter": {
85 "$numberInt": "100"
86 }
87 },
88 "rotten": {
89 "$numberInt": "0"
90 },
91 "lastUpdated": {
92 "$date": {
93 "$numberLong": "1439061370000"
94 }
95 }
96 },
97 "num_mflix_comments": {
98 "$numberInt": "0"
99 }
100}
Como alternativa, se quiser copiar esses objetos diretamente das coleções do Mongo, vá para a guia Collectionsna seçãoDatabase.
Navegue pelas collection na seção Database
Rastrear collection Mongo no Hasura Cloud
Clique no botãoValidate para validar o JSON document. Na próxima etapa, você verá os modelos derivados deste documento. Por fim, clique no botão Track Collection.
coleção de faixas de modelos lógicos

Experimente consultas GraphQL

Depois de acompanhar a collection, você deve navegar até a página do API Explorer no Console da Hasura para começar a experimentar algumas consultas do GraphQL.
Execute a seguinte query do GraphQL dentro da interface do GraphQL.
1query {
2 movies (limit: 10, order_by: { released: desc }) {
3 _id
4 title
5 released
6 imdb {
7 rating {
8 numberDouble
9 }
10 }
11 }
12}
Estamos tentando buscar 10 filmes, classificados por lançados, decrescente.
Você obterá uma resposta JSON à direita ao executar a consulta clicando no botãoplay.
API GraphQL com resposta JSON
Pronto! A API GraphQL para a coleçãomoviesagora está testada e pronta para consumo.
Use queries diferentes como você as vê na abaExplorer na barra lateral esquerda.
Você pode repetir isso para acompanhar mais coleções, como comments, users, theatersetc., e obter APIs geradas para todas elas.

Como a API do GraphQL é altamente eficiente?

O fato de a Hasura ter gerado a API GraphQL instantaneamente para as coleções reduz muitos códigos padrão que, de outra forma, você teria escrito na forma de resolvedores GraphQL em qualquer servidor.
Agora, você pode estar interessado em saber o desempenho da API. Você já garantiu que o banco de dados e a API estejam na mesma região para evitar problemas de latência. Mas vamos mergulhar mais fundo em como a execução da query funciona nos detalhes.
Ele se resume essencialmente a esses fatores:
  • Database pushdowns
  • Compilação de query que usa pipelines agregados

Pushdown de banco de dados com otimização de query

O Hasura é um compilador que recebe uma query GraphQL, a enriquece com predicados como parte da query e envia a query com regras de projeção, relacionamentos e autorização ao banco de dados para lidar com o volume de trabalho. Isso evita o processamento de dados pelo lado do servidor e aproveita os recursos do banco de dados para ser altamente eficiente e ter alto desempenho.
Com a natureza do GraphQL permitir que o cliente consulte o que deseja, é essencial buscar apenas os campos exatos solicitados pelo cliente. O Hasura faz isso compilando a consulta com projeção. Sem o Hasura, uma query típica pode não ser otimizada e buscar dados desnecessários (mais dados do que o necessário).
Ciclo de solicitação otimizado versus não otimizado com Mongo

Uso de pipelines de agregação

Vamos analisar a query gerada pelo Hasura. Para o exemplo de consulta GraphQL que usamos acima, clique no botão Analyze na seção GraphQL da página API Explorer.
Você verá que o plano de execução da consulta se parece com isto:
1{
2 "aggregate": "movies",
3 "pipeline": [
4 {
5 "$sort": {
6 "released": -1
7 }
8 },
9 {
10 "$limit": 10
11 },
12 {
13 "$replaceWith": {
14 "released": {
15 "$dateToString": {
16 "date": "$released"
17 }
18 },
19 "_id": "$_id",
20 "imdb": {
21 "$cond": {
22 "if": "$imdb",
23 "then": {
24 "rating": {
25 "$cond": {
26 "if": "$imdb.rating",
27 "then": {
28 "numberDouble": "$imdb.rating.numberDouble"
29 },
30 "else": null
31 }
32 }
33 },
34 "else": null
35 }
36 },
37 "title": "$title"
38 }
39 }
40 ],
41 "cursor": {}
42}
Você pode ver o uso de pipelines de agregação para alto desempenho.

Iteração na API com atualizações de coleções

Como a estrutura de um documento em uma coleção muda, deve ser tão simples quanto atualizar os metadados Hasura para adicionar ou remover os campos modificados. O esquema é flexível e você pode atualizar o modelo lógico para obter as atualizações da API. Não são necessárias migrações de banco de dados - basta adicionar ou remover campos dos metadados para refletir na API.

Resumo

A integração do MongoDB com o mecanismo GraphQL da Hasura traz um novo nível de eficiência e escalabilidade para os desenvolvedores. Ao aproveitar a capacidade da Hasura de criar uma API GraphQL unificada a partir de diversas fontes de dados, os desenvolvedores podem expor rapidamente os dados do MongoDB por meio de uma API GraphQL segura, de alto desempenho e altamente personalizável.
Recomendamos alguns recursos para saber mais sobre a integração.
Participe do servidor Hasura Discord para interagir com a comunidade Hasura e fazer perguntas sobre o GraphQL ou a integração do Hasura com o MongoDB.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Evento do setor
localizaçãoZURIQUE , Suíça | presencial

Dia do Desenvolvedor Zurique 24


Dec 12, 2024 | 8:00 AM - 4:00 PM UTC
Notícias e Anúncios

RAG facilitado com o MongoDB Atlas e o Azure OpenAI


Nov 20, 2024 | 4 min read
Tutorial

Hospedando com segurança um aplicativo Lambda com uma arquitetura de microsserviço e MongoDB Atlas


Sep 19, 2024 | 4 min read
Artigo

Como criar aplicativos sem servidor com SST e MongoDB Atlas


Aug 29, 2024 | 3 min read
Sumário