APIドキュメント
レスポンスキャッシュとCDN統合ガイド
Smart Money APIのパフォーマンスを最適化するためのインテリジェントなキャッシュ戦略を学びましょう。HTTPキャッシュヘッダー、ETag検証、CDN統合、クライアントサイドキャッシュパターンを使用してレイテンシと帯域幅コストを削減します。
公開日: 2026年3月21日
•
読了時間16分
•
パフォーマンス
キャッシュの概要
Smart Money APIエンドポイントは、異なる頻度で変化する暗号通貨市場データを提供します。一部のデータ(クジラアドレス、資金調達レート)は数秒ごとに更新され、他のデータ(履歴分析、教育コンテンツ)は数時間静的なままです。インテリジェントなキャッシュはパフォーマンスを大幅に向上させ、コストを削減します。
Smart Money APIは3層のキャッシュ戦略を実装しています:
- CDNエッジキャッシュ — 自動キャッシュ無効化を伴うグローバルコンテンツ配信
- HTTPブラウザキャッシュ — 標準HTTPヘッダーを使用したクライアントサイドキャッシュ
- アプリケーションキャッシュ — 頻繁にアクセスされるデータセットのためのメモリ内キャッシュ
パフォーマンスインサイト: キャッシュされたレスポンスは、新しいAPIリクエストよりも50~100倍高速に処理され、帯域幅を大幅に節約します。適切にキャッシュされた統合により、データ転送量を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"
// リアルタイム資金調達レート(1秒ごとに更新)
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ドキュメント、ガイド、設定 |
30秒でAPIキーを取得
構築の準備はできましたか?無料のAPIキー(1日100回、カード不要)を取得して、ライブのクジラ、資金調達、オンチェーンデータを取得しましょう。
APIキーを取得 →
ETagと条件付きリクエスト
ETag(エンティティタグ)は、完全なレスポンスボディをダウンロードせずにキャッシュされたコンテンツを検証する効率的な方法を提供します。
ETagの仕組み
- 初期リクエスト — クライアントがデータをリクエストし、サーバーがETagで応答
- キャッシュストレージ — クライアントはETagと共にレスポンスをキャッシュ
- 後続のリクエスト — クライアントはキャッシュされたETagを含むIf-None-Matchヘッダーを送信
- 検証 — データが変更されていない場合、サーバーは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: ブラウザキャッシュ300秒、CDN1時間
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はCloudflareのグローバルCDNネットワーク経由でレスポンスを配信し、世界中のエッジロケーションで自動的にキャッシュされるため、レイテンシーを最小限に抑えます。
Smart Money CDNの仕組み
- ユーザーリクエスト — リクエストが最寄りのCloudflareエッジロケーションに到達
- キャッシュチェック — エッジがレスポンスがキャッシュ済みで新鮮か確認
- キャッシュヒット — キャッシュ済みの場合、10ms未満のレイテンシーですぐに提供
- キャッシュミス — キャッシュされていない場合、オリジンサーバーから取得
- 保存&提供 — レスポンスをキャッシュしユーザーに配信
キャッシュキー設定
Cloudflareはキャッシュキーを使用してキャッシュレスポンスを一意に識別します。デフォルトでは:
- リクエストパスとクエリパラメータが含まれる
- ほとんどのヘッダーは無視される(キャッシュヒット率最大化のため)
- Authorizationヘッダーは含まれない(アカウント情報漏洩防止)
- カスタムヘッダーはVaryヘッダー経由で含め可能
CDNパージ
Smart Moneyはデータ更新時にCDNキャッシュを自動的にパージします:
// CDNから特定URLをパージ
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エッジからのキャッシュヒット
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 Workerを使用します:
// Service WorkerでAPIレスポンスをキャッシュ
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%)
- レスポンス時間 — 平均レイテンシ(キャッシュ時: <50ms、非キャッシュ時: 100-300ms)
- 節約された帯域幅 — データ転送の削減
- オリジン負荷 — オリジンサーバーへのリクエスト削減
キャッシュヘッダーの分析
// レスポンスキャッシュヘッダーを分析
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. レスポンスヘッダーを尊重
Smart Money APIからのCache-Controlヘッダーを常に尊重します。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のキャッシュインフラはグローバルスケールで100ms未満のレスポンスを保証。インテリジェントなキャッシュ戦略を実装し、パフォーマンス最大化とコスト最小化を実現。
プランを比較
全てのプランにフルCDNキャッシュが含まれます。上位ティアではキャッシュ制御とパージングAPIを提供。