5 minutes
Interrogation à partir d'une application
Apprenez à interroger The Graph à partir de votre application.
Obtenir des endpoints GraphQL
Au cours du processus de développement, vous recevrez un Endpoint de l’API GraphQL à deux étapes différentes : l’une pour les tests dans Subgraph Studio, et l’autre pour effectuer des requêtes sur The Graph Network en production.
Endpoint Subgraph Studio
Après avoir déployé votre subgraph dans Subgraph Studio, vous recevrez un endpoint qui ressemble à ceci :
1https://api.studio.thegraph.com/query/<ID>/<SUBGRAPH_NAME>/<VERSION>
Cet endpoint est destiné à des fins de test uniquement et son débit est limité.
Endpoint de The Graph Network
Après avoir publié votre subgraph sur le réseau, vous recevrez un endpoint qui ressemble à ceci : :
1https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>
Cet endpoint à une utilisation active sur le réseau. Il vous permet d’utiliser diverses bibliothèques client GraphQL pour interroger le Subgraph et alimenter votre application en données indexées.
Utilisation de clients GraphQL populaires
Graph Client
The Graph fournit son propre client GraphQL, graph-client
, qui prend en charge des fonctionnalités uniques telles que :
- Traitement des subgraphs multi-chaînes : Interrogation de plusieurs subgraphs en une seule requête
- Suivi automatique des blocs
- Pagination automatique
- Résultat entièrement typé
Remarque : graph-client
est intégré à d’autres clients GraphQL populaires tels qu’Apollo et URQL, qui sont compatibles avec des environnements tels que React, Angular, Node.js et React Native. Par conséquent, l’utilisation de graph-client
vous fournira une expérience améliorée pour travailler avec The Graph.
Récupérer des données avec Graph Client
Voyons comment récupérer les données d’un subgraph avec graph-client
:
Étape 1
Installez The Graph Client CLI dans votre projet :
1yarn add -D @graphprotocol/client-cli2# or, with NPM:3npm install --save-dev @graphprotocol/client-cli
Étape 2
Définissez votre requête dans un fichier .graphql
(ou dans votre fichier .js
ou .ts
) :
1query ExampleQuery {2 # celle-ci provient de compound-v23 markets(first: 7) {4 borrowRate5 cash6 collateralFactor7 }8 # celle-ci provient de uniswap-v29 pair(id: "0x00004ee988665cdda9a1080d5792cecd16dc1220") {10 id11 token0 {12 id13 symbol14 name15 }16 token1 {17 id18 symbol19 name20 }21 }22}
Étape 3
Créez un fichier de configuration (appelé .graphclientrc.yml
) et pointez vers vos endpoints GraphQL fournis par The Graph, par exemple :
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
Étape 4
Exécutez la commande CLI suivante de The Graph Client pour générer un code JavaScript typé et prêt à l’emploi :
1graphclient build
Étape 5
Mettez à jour votre fichier .ts
pour utiliser les documents GraphQL typés générés :
1import React, { useEffect } from 'react'2// ...3// nous importons les types et le document typed-graphql du code généré (`..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>Exemple de Graph Client</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
Note importante: graph-client
est parfaitement intégré avec d’autres clients GraphQL tels que Apollo client, URQL, ou React Query ; vous pouvez trouver des exemples dans le dépôt officiel. Cependant, si vous choisissez d’aller avec un autre client, gardez à l’esprit que vous ne serez pas en mesure d’utiliser Cross-chain Subgraph Handling (La manipulation cross-chain des subgraphs) ou Automatic Pagination (La pagination automatique), qui sont des fonctionnalités essentielles pour interroger The Graph.
Le client Apollo
[Apollo client] (https://www.apollographql.com/docs/) est un client GraphQL commun sur les écosystèmes front-end. Il est disponible pour React, Angular, Vue, Ember, iOS et Android.
Bien qu’il s’agisse du client le plus lourd, il possède de nombreuses fonctionnalités permettant de construire des interfaces utilisateur avancées sur GraphQL :
- Gestion avancée des erreurs
- Pagination
- Pré-récupération des données
- UI optimiste
- Gestion locale de l’État
Récupérer des données avec Apollo Client
Voyons comment récupérer les données d’un subgraph avec le client Apollo :
Étape 1
Installez @apollo/client
et graphql
:
1npm install @apollo/client graphql
Étape 2
Interrogez l’API avec le code suivant :
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 })
Étape 3
Pour utiliser des variables, vous pouvez passer un argument variables
à la requête :
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 })
Vue d’ensemble d’URQL
[URQL] (https://formidable.com/open-source/urql/) est disponible dans les environnements Node.js, React/Preact, Vue et Svelte, avec des fonctionnalités plus avancées :
- Système de cache flexible
- Conception extensible (facilitant l’ajout de nouvelles fonctionnalités par-dessus)
- Offre légère (~ 5 fois plus légère que Apollo Client)
- Prise en charge des téléchargements de fichiers et du mode hors ligne
Récupérer des données avec URQL
Voyons comment récupérer des données d’un subgraph avec URQL :
Étape 1
Installez urql
et graphql
:
1npm install urql graphql
Étape 2
Interrogez l’API avec le code suivant :
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()