So‘rov tezligi cheklovlari
Har bir kalit uchun tarif cheklovlari, javob sarlavhalari va xavfsiz qayta urinish tartibiga mos tizim yarating.
Har bir kalit uchun tarif cheklovlari, javob sarlavhalari va xavfsiz qayta urinish tartibiga mos tizim yarating.
Ochiq API har bir API kaliti yoki OAuth access tokeni uchun bir daqiqalik sirg‘aluvchi so‘rov oynasini qo‘llaydi. Cheklovni chetlab o‘tish uchun ko‘proq kalit yaratish qo‘llab-quvvatlanmaydi va hisob maʼlumotlari yoki hisobning cheklanishiga olib kelishi mumkin.
Tarif cheklovlari#
| Faol tarif | Har bir kalit uchun daqiqadagi so‘rovlar |
|---|---|
| Launch | 120 |
| Operate | 600 |
| Scale | 1 800 |
Hisobida faol pullik tarif bo‘lmagan hisob maʼlumoti tezlik kvotasi ajratilishidan oldin 403 subscription_required javobini oladi. Make Agent Fast juda qimmat amallar uchun pastroq endpointga xos cheklovlarni kiritishi mumkin; bunday holatda endpoint maʼlumotnomasida ular aniq ko‘rsatiladi.
Cheklovga tushgan javob#
So‘rov oynasi to‘lganda API quyidagilar bilan 429 rate_limit_exceeded qaytaradi:
HTTP/1.1 429 Too Many Requests
Retry-After: 17
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-Request-Id: 6c0b2f2e-...
Content-Type: application/jsonRetry-After — kutish kerak bo‘lgan eng kam soniyalar soni. Muvaffaqiyatli javoblar hozircha qolgan kvota hisoblagichini bermaydi, shuning uchun ilova cheklovni takroriy 429 javoblari orqali topishga urinmay, parallel so‘rovlar sonini o‘zi boshqarishi kerak.
Qayta urinishni amalga oshirish#
Tasodifiy og‘ish bilan eksponensial kutishdan foydalaning, kattaroq Retry-After qiymatiga amal qiling va umumiy urinishlar sonini cheklang.
async function requestWithRetry(url: string, init: RequestInit, attempts = 4) {
for (let attempt = 0; attempt < attempts; attempt += 1) {
const response = await fetch(url, init);
if (response.status !== 429 && response.status < 500) return response;
if (attempt === attempts - 1) return response;
const retryAfter = Number(response.headers.get("retry-after") ?? 0) * 1_000;
const exponential = 500 * 2 ** attempt;
const jitter = Math.random() * 250;
await new Promise((resolve) =>
setTimeout(resolve, Math.max(retryAfter, exponential + jitter)),
);
}
throw new Error("unreachable");
}POST, PATCH va DELETE so‘rovlarida har bir tarmoq yoki server qayta urinishida bir xil haqiqiy Idempotency-Keyni saqlang. Yangi idempotency kaliti tugallangan yon taʼsirni takrorlashi mumkin.
So‘rovlar sonini kamaytirish#
- Haqiqiy vaqt yangiligi kerak bo‘lmagan hisob, sayt va sozlama maʼlumotlarini keshda saqlang.
- Juda kichik sahifalarni ko‘p so‘rash o‘rniga har sahifada
100tagacha yozuv oling. - Suhbatlar, lidlar, domen holati yoki eʼlonlarni so‘rab turish o‘rniga webhook hodisalarini qayta ishlang.
- Har API kaliti uchun workerlar parallelligini cheklang; ko‘plab serverless ishga tushirishlar bir xil so‘rov oynasidan foydalanadi.
- Alohida xizmatlar uchun kalitlarni izolyatsiya va audit maqsadida ajrating, bitta vazifaning quvvatini ko‘paytirish uchun emas.
Qayta urinish yoki urinmaslik jadvali#
| Javob | Qayta urinilsinmi? | Shart |
|---|---|---|
429 | Ha | Retry-Afterni kuting, tasodifiy og‘ish qo‘shing va urinishlarni cheklang |
500 | Baʼzan | Xavfsiz o‘qishlar yoki bir xil idempotency kaliti bilan himoyalangan o‘zgartirishlar |
409 qayta ishlash ziddiyati | Ha | Uning Retry-After: 2 sarlavhasiga ko‘ra kuting va bir xil idempotency kalitini saqlang |
Boshqa 409 | Darhol emas | Joriy resurs holatini o‘qing va ziddiyatni hal qiling |
400, 401, 403, 404, 415 | Yo‘q | Avval kiritma, hisob maʼlumoti, ruxsat, yo‘l yoki content typeʼni to‘g‘rilang |
Doimiy yuk haqiqatan tarif oynasidan oshsa, cheksiz qayta urinish sikli qo‘shish o‘rniga so‘rab turishni kamaytiring, ishlarni guruhlang yoki namunaviy request IDʼlar va kutilayotgan trafik bilan yordam xizmatiga murojaat qiling.