Eseguire una query da un'applicazione
Reading time: 4 min
Once a subgraph is deployed to Subgraph Studio or to Graph Explorer, you will be given the endpoint for your GraphQL API that should look something like this:
Subgraph Studio (endpoint di test)
Queries (HTTP)https://api.studio.thegraph.com/query/<ID>/<SUBGRAPH_NAME>/<VERSION>
Graph Explorer
Queries (HTTP)https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>
Utilizzando il GraphQL endpoint, si possono usare varie librerie GraphQL Client per interrogare il subgraph e popolare l'applicazione con i dati indicizzati dal subgraph.
Ecco un paio dei GraphQL client più diffusi nell'ecosistema e come utilizzarli:
The Graph fornisce il proprio client GraphQL, graph-client
, che supporta caratteristiche uniche come:
- Gestione dei subgraph a cross-chain: effettuare query di più subgraph in un'unica query
- Risultato completamente tipizzato
Integrato anche con i client GraphQL più diffusi, come Apollo e URQL, e compatibile con tutti gli ambienti (React, Angular, Node.js, React Native), l'uso di graph-client
vi darà la migliore esperienza di interazione con The Graph.
Vediamo come recuperare i dati da un subgraph con graphql-client
.
Per iniziare, assicuratevi di installare il Graph Client CLI nel vostro progetto:
yarn add -D @graphprotocol/client-cli# or, with NPM:npm install --save-dev @graphprotocol/client-cli
Definire la query in un file .graphql
(o in un file .js
o .ts
):
query ExampleQuery {# this one is coming from compound-v2markets(first: 7) {borrowRatecashcollateralFactor}# this one is coming from uniswap-v2pair(id: "0x00004ee988665cdda9a1080d5792cecd16dc1220") {idtoken0 {idsymbolname}token1 {idsymbolname}}}
Quindi, creare un file di configurazione (chiamato .graphclientrc.yml
) e puntare agli endpoint GraphQL forniti da The Graph, ad esempio:
# .graphclientrc.ymlsources:- name: uniswapv2handler:graphql:endpoint: https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2- name: compoundv2handler:graphql:endpoint: https://api.thegraph.com/subgraphs/name/graphprotocol/compound-v2documents:- ./src/example-query.graphql
L'esecuzione del seguente comando The Graph Client CLI genererà codice JavaScript digitato e pronto all'uso:
graphclient build
Infine, aggiornare il file .ts
per utilizzare i documenti GraphQL digitati generati:
import React, { useEffect } from 'react'// ...// we import types and typed-graphql document from the generated code (`..graphclient/`)import { ExampleQueryDocument, ExampleQueryQuery, execute } from '../.graphclient'function App() {const [data, setData] = React.useState<ExampleQueryQuery>()useEffect(() => {execute(ExampleQueryDocument, {}).then((result) => {setData(result?.data)})}, [setData])return (<div className="App"><header className="App-header"><img src={logo} className="App-logo" alt="logo" /><p>Graph Client Example</p><fieldset>{data && (<form><label>Data</label><br /><textarea value={JSON.stringify(data, null, 2)} readOnly rows={25} /></form>)}</fieldset></header></div>)}export default App
⚠️ Avviso importante
graph-client
è perfettamente integrato con altri client GraphQL come Apollo client, URQL o React Query; .
Tuttavia, se scegliete un altro client, tenete presente che non sarete in grado di utilizzare la gestione dei Subgraph Cross-chain o la Paginazione Automatica, che sono caratteristiche fondamentali per effettuare query di The Graph.
è il client GraphQL onnipresente nell'ecosistema front-end.
Disponibile per React, Angular, Vue, Ember, iOS e Android, Apollo Client, sebbene sia il client più pesante, offre molte funzionalità per costruire UI avanzate in cima a GraphQL:
- gestione avanzata degli errori
- paginazione
- prefetching dei dati
- UI ottimistica
- gestione statale locale
Vediamo come recuperare i dati da un subgraph con il Apollo client in un progetto web.
Per prima cosa, installare @apollo/client
e graphql
:
npm install @apollo/client graphql
Quindi è possibile effettuare query del'API con il seguente codice:
import { ApolloClient, InMemoryCache, gql } from '@apollo/client'const APIURL = 'https://api.studio.thegraph.com/query//<SUBGRAPH_NAME>/'const tokensQuery = `query {tokens {idtokenIDcontentURImetadataURI}}`const client = new ApolloClient({uri: APIURL,cache: new InMemoryCache(),})client.query({query: gql(tokensQuery),}).then((data) => console.log('Subgraph data: ', data)).catch((err) => {console.log('Error fetching data: ', err)})
Per usare le variabili, si può passare un argomento variables
alla query:
const tokensQuery = `query($first: Int, $orderBy: BigInt, $orderDirection: String) {tokens(first: $first, orderBy: $orderBy, orderDirection: $orderDirection) {idtokenIDcontentURImetadataURI}}`client.query({query: gql(tokensQuery),variables: {first: 10,orderBy: 'createdAtTimestamp',orderDirection: 'desc',},}).then((data) => console.log('Subgraph data: ', data)).catch((err) => {console.log('Error fetching data: ', err)})
Un'altra opzione è , disponibile negli ambienti Node.js, React/Preact, Vue e Svelte, con caratteristiche più avanzate:
- Sistema di cache flessibile
- Design estensibile (facilita l'aggiunta di nuove funzionalità)
- Bundle leggero (~5 volte più leggero del Apollo Сlient)
- Supporto per il caricamento di file e la modalità offline
Vediamo come recuperare i dati da un subgraph con il URQL in un progetto web.
Per prima cosa, installare urql
e graphql
:
npm install urql graphql
Quindi è possibile effettuare query del'API con il seguente codice:
import { createClient } from 'urql'const APIURL = 'https://api.thegraph.com/subgraphs/name/username/subgraphname'const tokensQuery = `query {tokens {idtokenIDcontentURImetadataURI}}`const client = createClient({url: APIURL,})const data = await client.query(tokensQuery).toPromise()