Web3 Data Fetching Guide

Best practices for querying blockchain data in your dApps

Data Fetching Methods

MethodUse CaseLatencyCost
REST APIOne-time queries~100-500msRequest-based
WebSocketReal-time updates~10-50msConnection-based
JSON-RPCDirect node access~50-200msVariable
GraphQLComplex queries~100-300msRequest-based

REST API Approach

Best for simple, one-time requests:

// Get ETH balance via REST const response = await fetch( 'https://eth-mainnet.g.alchemy.com/v2/' + API_KEY, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', method: 'eth_getBalance', params: ['0x...', 'latest'], id: 1 }) } ) const data = await response.json()

WebSocket for Real-Time Data

Subscribe to new blocks and events:

const ws = new WebSocket( 'wss://eth-mainnet.ws.alchemy.com/v2/' + API_KEY ) ws.onopen = () => { ws.send(JSON.stringify({ jsonrpc: '2.0', method: 'eth_subscribe', params: ['newHeads'], id: 1 })) } ws.onmessage = (event) => { console.log('New block:', JSON.parse(event.data)) }

Caching Strategies

💡 Pro Tip: Use batched queries to reduce API calls. Most providers allow multiple requests in one call.

Error Handling

Compare Providers →