Интеграция 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 дня.