Інтеграція CoinMarketCap API: кешування та обробка помилок

Інтеграція CoinMarketCap API: кешування та обробка помилок Ми часто стикаємося з проєктами, де дані крипторинку потрібні в реальному часі, але без агресивного кешування безкоштовний план у 10 000 кредитів/місяць закінчується за пару днів. Один запит котирувань для десяти монет — це 10 кредитів. Я

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1009

Інтеграція CoinMarketCap API: кешування та обробка помилок

Ми часто стикаємося з проєктами, де дані крипторинку потрібні в реальному часі, але без агресивного кешування безкоштовний план у 10 000 кредитів/місяць закінчується за пару днів. Один запит котирувань для десяти монет — це 10 кредитів. Якщо оновлювати ціни щохвилини, ліміт вичерпається за 16 годин. В одному з проєктів для DeFi-агрегатора без кешування ліміт вилітав за добу — після налаштування Redis з TTL 60 секунд витрати знизилися в 10 разів, що заощадило клієнту близько $500 на місяць на платних тарифах. Наша команда має 10+ років досвіду в web3 та більше 50 реалізованих проєктів, тому ми гарантуємо стабільну інтеграцію. Розберемо типову інтеграцію, яка працює під навантаженням і не потребує дорогих тарифів.

Налаштування клієнта CoinMarketCap API

Реєстрація на pro.coinmarketcap.com дає ключ миттєво. Базовий URL: https://pro-api.coinmarketcap.com/v1/. Для тестування використовуйте sandbox: https://sandbox-api.coinmarketcap.com/v1/ (ключ b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c, дані фіктивні).

import axios, { AxiosInstance } from 'axios' class CoinMarketCapClient { private client: AxiosInstance constructor(apiKey: string, sandbox = false) { this.client = axios.create({ baseURL: sandbox ? 'https://sandbox-api.coinmarketcap.com/v1/' : 'https://pro-api.coinmarketcap.com/v1/', headers: { 'X-CMC_PRO_API_KEY': apiKey, 'Accept': 'application/json', }, }) } async getQuotes(symbols: string[]): Promise<Record<string, CmcQuote>> { const res = await this.client.get('/cryptocurrency/quotes/latest', { params: { symbol: symbols.join(','), convert: 'USD', }, }) return res.data.data } async getListings(limit = 100, start = 1): Promise<CmcListing[]> { const res = await this.client.get('/cryptocurrency/listings/latest', { params: { limit, start, convert: 'USD', sort: 'market_cap' }, }) return res.data.data } } 

Структура даних та мапінг монет

CoinMarketCap присвоює кожній монеті унікальний CMC ID (ціле число) — це надійніше ніж тікери, які можуть дублюватися. Мапінг тікер → CMC ID отримуємо через /v1/cryptocurrency/map і кешуємо на добу.

interface CmcQuote { id: number name: string symbol: string slug: string quote: { USD: { price: number volume_24h: number percent_change_24h: number market_cap: number } } } const idMap: Record<string, number> = { 'BTC': 1, 'ETH': 1027 } // отримання через /map і кешування 

Чому кешування таке важливе для CoinMarketCap API?

Кожен запит витрачає кредити. Один quotes з 10 символами — 10 кредитів. При 10 000 кредитів на місяць це всього 1000 запитів. Кешування з Redis дозволяє знизити витрати в 10 разів. Економія на API-кредитах може досягати 70% — це сотні доларів щомісяця для проєктів з високою частотою оновлення. Рекомендовані TTL:

Тип даних TTL Приклад використання
quotes/latest 60 с Відображення цін на сайті
listings/latest 300 с Список топ-100 монет
cryptocurrency/map 86400 с Мапінг тікер → CMC ID
historical (OHLCV) 3600 с Графіки за день
import { createClient } from 'redis' const redis = createClient({ url: process.env.REDIS_URL }) await redis.connect() async function getCachedQuotes( symbols: string[], ttlSeconds = 60 ): Promise<Record<string, CmcQuote>> { const cacheKey = `cmc:quotes:${symbols.sort().join(',')}` const cached = await redis.get(cacheKey) if (cached) { return JSON.parse(cached) } const fresh = await cmcClient.getQuotes(symbols) await redis.setEx(cacheKey, ttlSeconds, JSON.stringify(fresh)) return fresh } 

Як обробляти rate limit правильно?

Помилки 1008 (хвилинний ліміт) і 1009 (годинний ліміт) потребують експоненціального backoff. Початкова пауза 1 с, множник 2, максимум 5 спроб. Обробка кодів:

function handleCmcError(errorCode: number): void { if ([1008, 1009].includes(errorCode)) { throw new RateLimitError('CoinMarketCap rate limit exceeded') } if (errorCode === 1006) { alertTeam('CMC monthly credits exhausted') } } // Повторна спроба з backoff for (let attempt = 1; attempt <= 5; attempt++) { try { return await cmcClient.getQuotes(symbols) } catch (err) { if (err instanceof RateLimitError) { await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, attempt))) } else { throw err } } } 
Додаткові поради щодо обробки помилок
  • Помилка 1006 (вичерпання кредитів) — негайно повідомте команду.
  • Помилка 1007 (недійсний ключ) — перевірте API-ключ.
  • Помилка 1010 (недостатньо прав) — переконайтеся, що ключ має доступ до запитуваного ендпоінту.

Ендпоінти та вартість запитів

Ендпоінт Кредитів/запит
/quotes/latest (1 символ) 1
/quotes/latest (N символів) N
/listings/latest (100 монет) 1
/listings/latest (5000 монет) 50
/info (метадані) 1
/historical (OHLCV) 1 / точка
/global-metrics/latest 1

Вигідніше використовувати listings для масового отримання даних. Додаткові ендпоінти:

  • /v1/tools/price-conversion — конвертація валют.
  • /v1/cryptocurrency/category — топ монет за категоріями (DeFi, NFT).

Моніторинг витрати кредитів

Контроль балансу кредитів критичний для проєктів на безкоштовному тарифі. Поточну витрату можна отримати через ендпоінт /v1/key/info — він повертає creditsUsed, creditsLeft та дату оновлення. Рекомендуємо налаштувати перевірку раз на 6 годин і надсилати сповіщення в Telegram, коли залишок падає нижче 20% ліміту.

Для високонавантажених проєктів варто розділити ключі за середовищами: окремий ключ для production і окремий для staging. Це виключає витрату кредитів на тестові запити. За даними документації CoinMarketCap, промислові плани коштують від $79/місяць (Hobbyist, 40 000 кредитів) до $399/місяць (Startup, 200 000 кредитів). Правильне кешування дозволяє покрити потреби більшості MVP-проєктів безкоштовним планом у 10 000 кредитів.

Що входить в інтеграцію під ключ

При замовленні інтеграції CoinMarketCap API ви отримуєте:

  • Розробку клієнта з повною типізацією на TypeScript.
  • Мапінг монет через /cryptocurrency/map з кешуванням на добу.
  • Налаштування кешування Redis з оптимальними TTL під ваш сценарій.
  • Обробку rate limit з експоненціальним backoff і сповіщеннями.
  • Документацію та навчання команди (до 2 годин онлайн).
  • Місяць підтримки після впровадження.

Процес інтеграції під ключ

  1. Отримання ключа та налаштування клієнта з типізацією.
  2. Мапінг монет: отримання /cryptocurrency/map і кешування на добу.
  3. Налаштування кешування Redis з оптимальними TTL.
  4. Реалізація обробки rate limit з backoff.
  5. Документування та передача команді.

Зв'яжіться з нами, щоб ми оцінили ваш проєкт. Замовте інтеграцію CoinMarketCap API і забудьте про ліміти. Економія на API-кредитах може досягати 70% — це сотні доларів щомісяця. Реалізація під ключ займає 2–3 дні.