مستندات API
راهنمای کش کردن پاسخ و ادغام CDN
بهینهسازی عملکرد Smart Money API با استراتژیهای هوشمند کش کردن. یادگیری هدرهای کش HTTP، اعتبارسنجی ETag، ادغام CDN و الگوهای کش کردن سمت کلاینت برای کاهش تاخیر و هزینههای پهنای باند.
منتشر شده در ۲۱ مارس ۲۰۲۶
•
۱۶ دقیقه زمان مطالعه
•
عملکرد
مرور کلی کش کردن
نقاط پایانی Smart Money API دادههای بازار ارزهای دیجیتال را ارائه میدهند که با فرکانسهای مختلف تغییر میکنند. برخی دادهها (آدرسهای نهنگ، نرخهای تامین مالی) هر چند ثانیه بهروز میشوند، در حالی که دادههای دیگر (تحلیلهای تاریخی، محتوای آموزشی) برای ساعتها ثابت میمانند. کش کردن هوشمند به طور چشمگیری عملکرد را بهبود میبخشد و هزینهها را کاهش میدهد.
Smart Money API یک استراتژی کش کردن سهلایه را پیادهسازی میکند:
- کش لبه CDN — تحویل محتوای جهانی با ابطال خودکار کش
- کش مرورگر HTTP — کش کردن سمت کلاینت با استفاده از هدرهای استاندارد HTTP
- کش برنامه — کش کردن در حافظه برای مجموعهدادههای پر دسترسی
بینش عملکرد: پاسخهای کش شده ۵۰ تا ۱۰۰ برابر سریعتر از درخواستهای API تازه عمل میکنند و به طور قابل توجهی پهنای باند را ذخیره میکنند. یک ادغام به درستی کش شده میتواند انتقال داده را تا ۷۰ تا ۸۵ درصد کاهش دهد.
هر پاسخ Smart Money API شامل دستورات کش است که به کلاینتها و CDNها میگوید دادهها تا چه زمانی معتبر هستند. درک این دستورات و پیادهسازی صحیح آنها برای عملکرد بهینه ضروری است.
مبانی کش کردن
کش کردن HTTP بر اساس هدرهای پاسخ عمل میکند که نشان میدهند آیا محتوا میتواند کش شود و برای چه مدت.
هدر Cache-Control
مکانیزم اصلی برای کنترل رفتار کش. هر پاسخ Smart Money API شامل یک هدر Cache-Control است که مشخص میکند:
- max-age — مدت زمان به ثانیه که پاسخ معتبر میماند
- public/private — آیا کشهای واسط میتوانند آن را ذخیره کنند
- must-revalidate — آیا قبل از سرو باید تازگی بررسی شود
- no-store — دادههای حساس را کش نکنید
مثالهایی از هدرهای کش
نقاط پایانی مختلف نیازمندیهای کش متفاوتی دارند:
// دادههای آدرس نهنگ (هر ۵ دقیقه بهروز میشود)
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"
مدت زمان کش بر اساس نوع نقطه پایانی
| نوع داده |
مدت زمان کش |
موارد استفاده |
| تامین مالی بلادرنگ |
۱-۵ ثانیه |
معامله زنده، اندازهگیری موقعیت |
| حرکات نهنگ |
۵ دقیقه |
تایید سیگنال، هشدارها |
| OHLCV روزانه |
۱ ساعت |
تحلیل فنی، نمودارها |
| تحلیل تاریخی |
۲۴ ساعت |
بکتست، تحقیق |
| محتوا ثابت |
۷ روز |
مستندات API، راهنماها، پیکربندی |
کلید API خود را در ۳۰ ثانیه دریافت کنید
آماده ساخت هستید؟ یک کلید API رایگان دریافت کنید (۵۰ درخواست در روز، بدون نیاز به کارت) و شروع به دریافت دادههای زنده نهنگ، تامین مالی و زنجیرهای کنید.
کلید API خود را دریافت کنید →
ETag و درخواستهای شرطی
ETagها (برچسبهای موجودیت) راهی کارآمد برای اعتبارسنجی محتوای کش شده بدون دانلود کامل بدنه پاسخ ارائه میدهند.
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 به شما امکان میدهد استراتژیهای کش بهینهای برای برنامه خود بسازید.
مرجع دستورات
| دستور |
معنی |
مثال |
| 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 |
الگوهای عملی کنترل کش
// الگوی 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 ارائه میدهد و به طور خودکار پاسخها را در مکانهای لبه در سراسر جهان کش میکند تا تأخیر به حداقل برسد.
نحوه عملکرد Smart Money CDN
- درخواست کاربر — درخواست به نزدیکترین مکان لبه Cloudflare میرسد
- بررسی کش — لبه بررسی میکند که آیا پاسخ کش شده و تازه است
- ضربه کش — اگر کش شده باشد، بلافاصله با تأخیر کمتر از 10ms ارائه میشود
- خطای کش — اگر کش نشده باشد، از سرور اصلی دریافت میشود
- ذخیره و ارائه — پاسخ کش شده و به کاربر تحویل داده میشود
پیکربندی کلید کش
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
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%)
- زمان پاسخ — تاخیر متوسط (کش شده: <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. احترام به هدرهای پاسخ
همیشه به هدرهای 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 پاسخهای زیر 100ms را در مقیاس جهانی تضمین میکند. استراتژیهای هوشمند کش را پیادهسازی کنید تا عملکرد را به حداکثر و هزینهها را به حداقل برسانید.
مقایسه طرحها
همه طرحها شامل کش کامل CDN هستند. سطوح بالاتر کنترل کش و APIهای پاکسازی را ارائه میدهند.