4 dakika
Bir Uygulamadan Sorgu Yapma
Uygulamanızdan The Graph’e nasıl sorgu yapacağınızı öğrenin.
GraphQL Uç Noktalarını Alma
Geliştirme süreci boyunca iki farklı aşamada birer GraphQL API’si uç noktası alırsınız: biri Subgraph Studio’da test etmek için, diğeri ise üretim ortamında The Graph Ağı’na sorgular göndermek içindir.
Subgraph Studio Uç Noktası
Subgraph Studio ortamına Subgraph’inizi dağıttıktan sonra, aşağıdakine benzer bir uç nokta alırsınız:
1https://api.studio.thegraph.com/query/<ID>/<SUBGRAPH_NAME>/<VERSION>
Bu uç nokta yalnızca test amaçlıdır ve istek sayısı sınırlandırılmıştır.
The Graph Ağı Uç Noktası
Subgraph’inizi ağa yayımladıktan sonra, aşağıdakine benzer bir uç nokta alırsınız:
1https://gateway.thegraph.com/api/<API_KEY>/subgraphs/id/<SUBGRAPH_ID>
Bu uç nokta, ağ üzerinde aktif kullanım için tasarlanmıştır. Çeşitli GraphQL istemci kütüphanelerini kullanarak Subgraph’e sorgu göndermenize ve uygulamanızı endekslenmiş verilerle beslemenize olanak tanır.
Popüler GraphQL İstemcilerini Kullanma
Graph İstemcisi
The Graph, kendisine ait bir GraphQL istemcisi olan graph-client
’i sunar ve bu istemci aşağıdaki gibi rakipsiz özellikleri destekler:
- Zincirler arası Subgraph İşleme: Tek bir sorguda birden fazla Subgraph’ten veri sorgulama
- Otomatik Blok Takibi
- Otomatik Sayfalama
- Tamamen yazılmış sonuç
Not: graph-client
, Apollo ve URQL gibi diğer popüler GraphQL istemcileriyle entegredir ve React, Angular, Node.js ile React Native gibi ortamlarla uyumludur. Bu nedenle, graph-client
kullanmak, The Graph ile çalışırken size geliştirilmiş bir deneyim sunar.
Graph Client ile Veri Çekme
graph-client
ile bir Subgraph’ten nasıl veri çekebileceğimize bakalım:
1. Adım
Projenizde The Graph Client CLI’yi kurun:
1yarn add -D @graphprotocol/client-cli2# veya, NPM ile:3npm install --save-dev @graphprotocol/client-cli
2. Adım
Sorgunuzu bir .graphql
dosyasında tanımlayın (veya doğrudan .js
ya da .ts
dosyanıza satır içi olarak ekleyin):
1query ExampleQuery {2 # burası compound-v2'den geliyor3 markets(first: 7) {4 borrowRate5 cash6 collateralFactor7 }8 # burası uniswap-v2'den geliyor9 pair(id: "0x00004ee988665cdda9a1080d5792cecd16dc1220") {10 id11 token0 {12 id13 symbol14 name15 }16 token1 {17 id18 symbol19 name20 }21 }22}
3. Adım
Bir yapılandırma dosyası oluşturun (.graphclientrc.yml
adında) ve The Graph tarafından sağlanan GraphQL uç noktalarına işaret edin. Örneğin:
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
4. Adım
Halihazırda yazılmış ve kullanıma hazır JavaScript kodu üretmek için aşağıdaki The Graph Client CLI komutunu çalıştırın:
1graphclient build
5. Adım
Oluşturulan tip tanımlı GraphQL dökümanlarını kullanmak için .ts
dosyanızı güncelleyin:
1import React, { useEffect } from 'react'2// ...3// oluşturulan koddan (`..graphclient/`) tipleri ve tip tanımlı graphql dökümanını içe aktarıyoruz4import { 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
Önemli Not: graph-client
, Apollo Client, URQL veya React Query gibi diğer GraphQL istemcileriyle tamamen entegredir; resmi depoda örneklere ulaşabilirsiniz. Ancak farklı bir istemci kullanmayı tercih ederseniz, The Graph ile sorgu yaparken temel özelliklerden olan Zincirler Arası Subgraph İşleme ve Otomatik Sayfalama fonksiyonlarını kullanamayacağınızı unutmayın.
Apollo Client
Apollo Client, önyüz ekosistemlerinde yaygın olarak kullanılan bir GraphQL istemcisidir. React, Angular, Vue, Ember, iOS ve Android gibi platformlarda kullanılabilir.
En ağır istemci olmasına rağmen, GraphQL üzerine gelişmiş bir kullanıcı arayüzü oluşturmak için birçok özelliğe sahiptir:
- Gelişmiş hata yönetimi
- Sayfalandırma
- Veriyi ön belleğe alma (prefetching)
- Optimist kullanıcı arayüzü (UI)
- Yerel durum yönetimi
Apollo Client ile Veri Getirme
Apollo client ile bir Subgraph’ten nasıl veri çekebileceğimize bakalım:
1. Adım
@apollo/client
ve graphql
i yükleyin:
1npm install @apollo/client graphql
2. Adım
Aşağıdaki kod ile API’ye sorgu gönderin:
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 })
3. Adım
Değişken kullanmak için, sorguya bir variables
argümanı geçebilirsiniz:
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 })
URQL’e Genel Bakış
URQL, Node.js, React/Preact, Vue ve Svelte ortamlarında kullanılabilir ve bazı gelişmiş özellikler sunar:
- Esnek önbellek sistemi
- Genişletilebilir tasarım (üzerine yeni özellikler eklemeyi kolaylaştırır)
- Hafif paket yapısı (Apollo Client’tan yaklaşık 5 kat daha hafif)
- Dosya yükleme ve çevrimdışı mod desteği
URQL ile veri getirme
URQL ile bir Subgraph’ten nasıl veri çekebileceğimize bakalım:
1. Adım
urql
and graphql
i yükleyin:
1npm install urql graphql
2. Adım
Aşağıdaki kod ile API’ye sorgu gönderin:
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()