5 minutos
Como Fazer Queries de um Aplicativo
Aprenda a solicitar um query do The Graph a partir do seu aplicativo.
Como Resgatar Pontos Finais da GraphQL
Durante o processo de programação, você receberá um ponto final da API da GraphQL em dois estágios diferentes: um para testar no Subgraph Studio, e outro para fazer queries à The Graph Network na produção.
Ponto Final do Subgraph Studio
Após implementar o seu subgraph ao Subgraph Studio, você receberá um ponto final parecido com isto:
1https://api.studio.thegraph.com/query/<ID>/<SUBGRAPH_NAME>/<VERSION>
Este ponto final é apenas para testes, e tem limite de taxa.
Ponto Final da The Graph Network
Após editar o seu subgraph à rede, você receberá um ponto final parecido com isto:
1https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>
O ponto final é feito para uso ativo na rede, e permite o uso de várias bibliotecas de cliente da GraphQL para solicitar queries do subgraph e popular o seu aplicativo com dados indexados.
Como Usar Clientes GraphQL Populares
Graph Client
O The Graph fornece um cliente GraphQL próprio, graph-client
, que apoia recursos únicos como:
- Gestão de Subgraph Entre Chains: Queries de múltiplos subgraphs numa única consulta
- Rastreamento Automático de Blocos
- Paginação Automática
- Resultado totalmente digitado
Observação: o graph-client
também é integrado com clientes GraphQL populares como Apollo e URQL, compatíveis com todos os ambientes (React, Angular, Node.js, React Native); utilizar o graph-client
proverá a melhor experiência para interagir com o The Graph.
Como Resgatar Dados com o Graph Client
Vamos ver como retirar dados de um subgraph com o graph-client
:
Passo 1
Instale a CLI do The Graph Client no seu projeto:
1yarn add -D @graphprotocol/client-cli2# ou, com NPM:3npm install --save-dev @graphprotocol/client-cli
Passo 2
Defina o seu query num arquivo .graphql
(ou embutido no seu arquivo, .js
ou .ts
):
1query ExampleQuery {2 # este vem do compound-v23 markets(first: 7) {4 borrowRate5 cash6 collateralFactor7 }8 # este vem do uniswap-v29 pair(id: "0x00004ee988665cdda9a1080d5792cecd16dc1220") {10 id11 token0 {12 id13 symbol14 name15 }16 token1 {17 id18 symbol19 name20 }21 }22}
Passo 3
Depois, crie um arquivo de configuração (chamado .graphclientrc.yml
) e aponte aos seus endpoints GraphQL oferecidos pelo The Graph, por exemplo:
1# .graphclientrc.yml2sources:3 - name: uniswapv24 handler:5 graphql:6 endpoint: https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>7 - name: compoundv28 handler:9 graphql:10 endpoint: https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>1112documents:13 - ./src/example-query.graphql
Passo 4
Execute o seguinte comando na CLI do Graph Client para gerar códigos JavaScript digitados e prontos para uso:
1graphclient build
Passo 5
Atualize o seu arquivo .ts
para usar os documentos digitados em GraphQL já gerados:
1import React, { useEffect } from 'react'2// ...3// Importamos tipos e documentos digitados da graphql do código gerado (`..graphclient/`)4import { ExampleQueryDocument, ExampleQueryQuery, execute } from '../.graphclient'56function App() {7 const [data, setData] = React.useState<ExampleQueryQuery>()89 useEffect(() => {10 execute(ExampleQueryDocument, {}).then((result) => {11 setData(result?.data)12 })13 }, [setData])14 return (15 <div className="App">16 <header className="App-header">17 <img src={logo} className="App-logo" alt="logo" />18 <p>Graph Client Example</p>19 <fieldset>20 {data && (21 <form>22 <label>Data</label>23 <br />24 <textarea value={JSON.stringify(data, null, 2)} readOnly rows={25} />25 </form>26 )}27 </fieldset>28 </header>29 </div>30 )31}3233export default App
Importante: graph-client
é perfeitamente integrado com outros clientes GraphQL, como Apollo, URQL, ou React Query; mais exemplos no repositório oficial. No entanto, se escolher outro cliente, lembre-se que não terá como usar o Manuseio de Subgraphs Cross-chain ou a Paginação Automática, que são recursos essenciais para consultar o The Graph.
Cliente Apollo
O Apollo é um cliente GraphQL comum em ecossistemas de front-end. Disponível para React, Angular, Vue, Ember, iOS, e Android.
É o cliente mais pesado, mas tem muitas funções para construir interfaces avançadas em cima da GraphQL:
- Tratamento de erros avançado
- Paginação
- Pré-resgate de dados
- Interface otimista
- Gestão de estado local
Como Resgatar Dados pelo Cliente Apollo
Vamos ver como retirar dados de um subgraph com o cliente Apollo:
Passo 1
Primeiro, instale o @apollo/client
e o graphql
:
1npm install @apollo/client graphql
Passo 2
Depois, solicite um query da API com o seguinte código:
1import { ApolloClient, InMemoryCache, gql } from '@apollo/client'23const APIURL = 'https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>'45const tokensQuery = `6 query {7 tokens {8 id9 tokenID10 contentURI11 metadataURI12 }13 }14`1516const client = new ApolloClient({17 uri: APIURL,18 cache: new InMemoryCache(),19})2021client22 .query({23 query: gql(tokensQuery),24 })25 .then((data) => console.log('Subgraph data: ', data))26 .catch((err) => {27 console.log('Error fetching data: ', err)28 })
Passo 3
Para usar variáveis, dá para passar um argumento variables
ao query:
1const tokensQuery = `2 query($first: Int, $orderBy: BigInt, $orderDirection: String) {3 tokens(4 first: $first, orderBy: $orderBy, orderDirection: $orderDirection5 ) {6 id7 tokenID8 contentURI9 metadataURI10 }11 }12`1314client15 .query({16 query: gql(tokensQuery),17 variables: {18 first: 10,19 orderBy: 'createdAtTimestamp',20 orderDirection: 'desc',21 },22 })23 .then((data) => console.log('Subgraph data: ', data))24 .catch((err) => {25 console.log('Error fetching data: ', err)26 })
Visão Geral do URQL
O URQL está disponível nos ambientes: Node.js, React/Preact, Vue, e Svelte, com algumas funções mais avançadas:
- Sistema de cache flexível
- Design extensível (mais fácil adicionar novas capacidades em cima dele)
- Pacote leve (cerca de 5x mais leve que o Apollo)
- Apoio para envios de arquivo e modo offline
Como retirar dados com o URQL
Vamos ver como retirar dados de um subgraph com o URQL:
Passo 1
Instale urql
e graphql
:
1npm install urql graphql
Passo 2
Depois, solicite um query da API com o seguinte código:
1import { createClient } from 'urql'23const APIURL = 'https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>'45const tokensQuery = `6 query {7 tokens {8 id9 tokenID10 contentURI11 metadataURI12 }13 }14`1516const client = createClient({17 url: APIURL,18})1920const data = await client.query(tokensQuery).toPromise()