Документация API
Руководство по кэшированию ответов и интеграции CDN
Оптимизируйте производительность Smart Money API с помощью интеллектуальных стратегий кэширования. Изучите HTTP-заголовки кэширования, валидацию ETag, интеграцию с CDN и клиентские шаблоны кэширования для снижения задержек и затрат на трафик.
Опубликовано 21 марта 2026
•
16 минут чтения
•
Производительность
Обзор кэширования
Конечные точки Smart Money API предоставляют данные криптовалютного рынка, которые меняются с разной частотой. Некоторые данные (адреса китов, ставки финансирования) обновляются каждые несколько секунд, а другие (исторический анализ, обучающие материалы) остаются статичными в течение часов. Интеллектуальное кэширование значительно улучшает производительность и снижает затраты.
Smart Money API реализует трехуровневую стратегию кэширования:
- Кэш CDN Edge — Глобальная доставка контента с автоматической инвалидацией кэша
- HTTP-кэш браузера — Клиентское кэширование с использованием стандартных HTTP-заголовков
- Кэш приложения — Кэширование в памяти для часто используемых наборов данных
Инсайт производительности: Кэшированные ответы обрабатываются в 50-100 раз быстрее, чем новые запросы к API, и значительно экономят трафик. Правильно настроенное кэширование может сократить передачу данных на 70-85%.
Каждый ответ Smart Money API включает директивы кэширования, которые сообщают клиентам и CDN, как долго данные остаются актуальными. Понимание этих директив и их правильная реализация критически важны для оптимальной производительности.
Основы кэширования
HTTP-кэширование работает на основе заголовков ответа, которые указывают, можно ли кэшировать контент и как долго.
Заголовок Cache-Control
Основной механизм управления поведением кэширования. Каждый ответ Smart Money API включает заголовок Cache-Control, указывающий:
- max-age — Время в секундах, в течение которого ответ остается актуальным
- public/private — Могут ли промежуточные кэши сохранять его
- must-revalidate — Нужно ли проверять актуальность перед выдачей
- no-store — Не кэшировать конфиденциальные данные
Примеры заголовков кэширования
Разные конечные точки имеют разные требования к кэшированию:
// Данные адресов китов (обновляются каждые 5 минут)
Cache-Control: public, max-age=300
ETag: "abc123def456"
// Ставки финансирования в реальном времени (обновляются каждую секунду)
Cache-Control: public, max-age=1
ETag: "xyz789abc123"
// Исторические данные (не меняются)
Cache-Control: public, max-age=86400, immutable
ETag: "static-content-v1"
Длительность кэширования по типам конечных точек
| Тип данных |
Длительность кэширования |
Сценарий использования |
| Ставки финансирования в реальном времени |
1-5 секунд |
Живая торговля, расчет позиций |
| Движения китов |
5 минут |
Подтверждение сигналов, оповещения |
| Дневные данные OHLCV |
1 час |
Технический анализ, графики |
| Исторический анализ |
24 часа |
Бэктестинг, исследование |
| Статичный контент |
7 дней |
Документация API, руководства, конфигурация |
Получите API-ключ за 30 секунд
Готовы к разработке? Получите бесплатный API-ключ (100 вызовов/день, без карты) и начните получать данные о китах, финансировании и ончейн-данных.
Получить API-ключ →
ETag и условные запросы
ETag (Entity Tags) предоставляют эффективный способ проверки кэшированного контента без загрузки полного тела ответа.
Как работают ETag
- Первоначальный запрос — Клиент запрашивает данные, сервер отвечает с ETag
- Хранение в кэше — Клиент сохраняет ответ с ETag
- Последующий запрос — Клиент отправляет заголовок If-None-Match с кэшированным ETag
- Проверка — Если данные не изменились, сервер возвращает 304 Not Modified
- Сэкономленная пропускная способность — Тело ответа не отправляется, значительная экономия трафика
Реализация ETag
// Первый запрос
GET /v1/whales/btc HTTP/1.1
// Ответ включает ETag
HTTP/1.1 200 OK
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
Content-Type: application/json
{...response body...}
// После истечения срока кэша отправляется If-None-Match
GET /v1/whales/btc HTTP/1.1
If-None-Match: "8a3b9c2d"
// Если данные не изменились, сервер отвечает 304
HTTP/1.1 304 Not Modified
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
// Тело не отправлено! Трафик сэкономлен
Типы ETag
ETag может быть строгим или слабым:
| Тип |
Формат |
Случай использования |
| Строгий ETag |
"8a3b9c2d" |
Байт-в-байт идентичен, используется для проверки |
| Слабый ETag |
W/"8a3b9c2d" |
Семантически эквивалентен, для изменений отображения |
Директивы Cache-Control
Понимание директив Cache-Control позволяет создавать оптимальные стратегии кэширования для вашего приложения.
Справочник директив
| Директива |
Значение |
Пример |
| max-age |
Время в секундах, в течение которого ответ остается актуальным |
max-age=300 |
| public |
Кэш может хранить и делиться ответом |
public |
| private |
Кэшируется только для получателя |
private |
| must-revalidate |
Проверять актуальность при устаревании |
must-revalidate |
| no-cache |
Перед использованием необходимо проверить актуальность |
no-cache |
| no-store |
Не кэшировать вообще |
no-store |
| immutable |
Никогда не изменяется, кэшировать навсегда |
immutable |
| s-maxage |
Время кэширования для CDN |
s-maxage=3600 |
Практические шаблоны Cache-Control
// Шаблон 1: Кэш браузера, CDN на 1 час
Cache-Control: public, max-age=300, s-maxage=3600
// Шаблон 2: Персональные данные, без кэширования прокси
Cache-Control: private, max-age=1800
// Шаблон 3: Всегда свежие данные, всегда проверять
Cache-Control: public, no-cache, must-revalidate
// Шаблон 4: Версионный неизменяемый ресурс
Cache-Control: public, max-age=31536000, immutable
Интеграция с CDN
Smart Money API доставляет ответы через глобальную сеть CDN Cloudflare, автоматически кэшируя ответы на edge-серверах по всему миру для минимальной задержки.
Как работает CDN Smart Money
- Запрос пользователя — Запрос попадает на ближайший edge-сервер Cloudflare
- Проверка кэша — Edge-сервер проверяет, есть ли ответ в кэше и актуален ли он
- Попадание в кэш — Если есть в кэше, ответ отправляется немедленно с задержкой <10 мс
- Промах кэша — Если нет в кэше, запрос отправляется на исходный сервер
- Сохранение и отправка — Ответ кэшируется и доставляется пользователю
Настройка ключа кэша
Cloudflare использует ключи кэша для уникальной идентификации кэшированных ответов. По умолчанию:
- Путь запроса и параметры запроса включены
- Большинство заголовков игнорируется (для максимизации попаданий в кэш)
- Заголовки авторизации НЕ включены (нет утечки данных аккаунта)
- Пользовательские заголовки могут быть включены через заголовок Vary
Очистка CDN
Smart Money автоматически очищает кэш CDN при обновлении данных:
// Очистка конкретного URL из CDN
curl -X POST "https://api.smartmoneyapi.com/v1/cache/purge" \
-H "Authorization: Bearer token" \
-d '{
"urls": [
"https://api.smartmoneyapi.com/v1/whales/btc"
]
}'
Измерение производительности CDN
Проверьте заголовки ответа, чтобы узнать, был ли запрос обработан из кэша:
// Попадание в кэш CDN edge
CF-Cache-Status: HIT
CF-RAY: 8a9b7c6d5e4f3g2h
Age: 45 // секунд с момента кэширования
// Промах кэша, запрос к исходному серверу
CF-Cache-Status: MISS
Age: 0
Клиентское кэширование
Реализуйте кэширование в вашем приложении, чтобы сократить количество API-вызовов и повысить отзывчивость.
Реализация кэширования в браузере
// Создание хранилища кэша
const cache = new Map();
async function fetchWithCache(url) {
// Сначала проверяем кеш
const cached = cache.get(url);
if (cached && !isCacheExpired(cached)) {
return cached.data;
}
// Получаем данные из API
const response = await fetch(url);
const data = await response.json();
// Парсим время кеширования из заголовков
const cacheControl = response.headers
.get('cache-control');
const maxAge = parseMaxAge(cacheControl);
// Сохраняем в кеш
cache.set(url, {
data,
expiry: Date.now() + (maxAge * 1000)
});
return data;
}
Кеширование с помощью Service Worker
Для поддержки оффлайн-режима и продвинутых стратегий кеширования используйте Service Workers:
// Кеширование ответов API с помощью Service Worker
self.addEventListener('fetch', (event) => {
if (event.request.url.includes('api.smartmoneyapi.com')) {
Сначала сеть, затем кеш
event.respondWith(
fetch(event.request)
.then(response => {
// Обновляем кеш свежим ответом
caches.open('api-cache')
.then(cache => cache.put(
event.request, response.clone()));
return response;
})
.catch(() =>
caches.match(event.request))
);
}
});
Стратегии сброса кеша
Иногда нужно принудительно обновить данные у клиентов. Используйте эти методы:
Версионный параметр
Добавьте параметр версии для инвалидации кеша при изменении данных:
// Включаем версию данных или временную метку
https://api.smartmoneyapi.com/v1/whales/btc?v=1709980800
// При обновлении данных увеличиваем версию
https://api.smartmoneyapi.com/v1/whales/btc?v=1709981000
// Новый URL = новая запись в кеше
Принудительная ревалидация
Переопределите кеш с помощью Cache-Control: no-cache, когда нужны свежие данные:
// JavaScript: Принудительный запрос свежих данных
fetch(url, {
cache: 'no-cache', // Всегда ревалидировать
headers: {
'Cache-Control': 'max-age=0'
}
});
Мониторинг производительности кеша
Отслеживайте процент попаданий в кеш и улучшения производительности для проверки стратегии кеширования.
Метрики кеша для мониторинга
- Процент попаданий — Доля запросов, обслуживаемых из кеша (цель: >70%)
- Время ответа — Средняя задержка (кеш: <50мс, без кеша: 100-300мс)
- Сэкономленная пропускная способность — Снижение объема передаваемых данных
- Нагрузка на сервер — Снижение запросов к основному серверу
Анализ заголовков кеша
// Анализируем заголовки кеша ответа
async function analyzeCache(url) {
const response = await fetch(url);
return {
cacheControl: response.headers
.get('cache-control'),
etag: response.headers.get('etag'),
age: response.headers.get('age'),
cfStatus: response.headers
.get('cf-cache-status'),
contentLength:
response.headers.get('content-length')
};
}
Лучшие практики кеширования
1. Уважайте заголовки ответа
Всегда учитывайте заголовки Cache-Control от Smart Money API. Не кешируйте контент с пометками no-store или no-cache.
2. Реализуйте условные запросы
Отправляйте заголовки If-None-Match (ETag) и If-Modified-Since при ревалидации кешированного контента. Экономьте трафик с ответами 304.
3. Кешируйте в зависимости от типа данных
- Данные в реальном времени (ставки финансирования): максимум 1-5 секунд кеша
- Живые сигналы (движение китов): кеш на 5-30 секунд
- Часовые данные (OHLCV): кеш на 1 час
- Исторические данные: кеш на 24 часа
- Статический контент: кеш на 7 дней
4. Мониторьте эффективность кеша
Отслеживайте процент попаданий и улучшения задержки. Настраивайте TTL в зависимости от требований к актуальности данных и производительности кеша.
5. Используйте заголовки Vary с осторожностью
Заголовки Vary уменьшают попадания в кеш, создавая отдельные записи. Используйте только при необходимости для разных уровней аутентификации или параметров.
6. Кешируйте на нескольких уровнях
Реализуйте кеширование на уровнях CDN, браузера и приложения. Каждый уровень перехватывает запросы до обращения к основному серверу.
Оптимизируйте производительность API
Инфраструктура кеширования Smart Money API обеспечивает ответы менее 100 мс в глобальном масштабе. Реализуйте интеллектуальные стратегии кеширования для максимальной производительности и минимальных затрат.
Сравнение тарифов
Все тарифы включают полное кеширование через CDN. Более высокие тарифы предоставляют API для управления кешем и его очистки.