Limitler & Kotalar

Rate limit'ler, webhook teslim sınırları, senkron action/hook timeout'ları ve development store kotaları. DEV (test) ve PROD (canlı) değerleri FARKLIDIR — dev kasıtlı olarak sıkıdır (incelenmemiş kod platformu zorlamasın diye).

Rate limit'ler (per-install)

YönDEV (test)PROD (canlı)Aşılırsa
GET /plugin-api/*eklenti → bize5 / dk120 / dk429 plugin.rateLimited
POST /plugin-api/* (write)eklenti → bize20 / dk (ayrı write havuzu — okumadan bağımsız)429 plugin.rateLimited
/plugins/actionbize → eklenti (senkron)5 / dk60 / dkplugin.rateLimited
/plugins/hookbize → eklenti (senkron)5 / dk60 / dkplugin.rateLimited
Günlük cap (yalnız DEV)Callback/action/hook200 / günyok429
  • DEV sıkıdır (test ortamı): manuel test için yeterlidir — otomatik/yük testi yapma. PROD'da limitler boldur.
429 alınca: hemen tekrar deneme — üstel backoff + jitter uygula; dev'de testleri ölçülü tetikle. Dev limitin gerçekten yetmiyorsa bize yaz.
Node — 429 retry deseni
// 429 → üstel backoff + jitter ile yeniden dene (genel desen)
async function callWithRetry(fn, maxAttempts = 5) {
  for (let attempt = 1; ; attempt++) {
    const res = await fn();
    if (res.status !== 429 || attempt === maxAttempts) return res;
    const base = Math.min(30_000, 1000 * 2 ** (attempt - 1)); // 1s, 2s, 4s, 8s… (max 30s)
    const jitter = Math.random() * base * 0.3;                 // senkronize patlamayı kır
    await new Promise((r) => setTimeout(r, base + jitter));
  }
}

const res = await callWithRetry(() =>
  fetch(BASE + '/plugin-api/products/list', { headers: { Authorization: 'Bearer ' + apiKey } }),
);

Webhook teslimi (event'ler + lifecycle)

SınırDeğer
Timeout10 sn / deneme (redirect takip edilmez)
Retrymax 6 deneme, artan aralıklı (1 sn → 1 saat); sonrasında teslim bırakılır
Beklenen yanıthızlı 2xx — ağır işi async yap (yoksa timeout → retry)
İmzaX-Restomenum-Signature (HMAC) — doğrula, ±5 dk replay penceresi
Idempotencyenvelope id — retry'da aynı id gelir → dedup et
Outbound cap (per-install)yok (event'ler tenant aktivitesiyle gelir)

Endpoint'in hızlı + idempotent + imza-doğrulamalı olmalı. Yavaş/hatalı endpoint → retry → en sonunda teslim düşer. Bkz. /webhook alıcısı, imza şeması, lifecycle.

Senkron yanıt timeout'ları (action / hook)

TürTimeoutGeç dönersen
/plugins/action (UI buton)8 sn (max 10)plugin.action.timeout
/plugins/hook (before-action)5 sn (max 10)fail-closed (default) → işlem iptal

Bu sürede { success, message, level, display } dön. Detay: Action ucu · Hook'lar.

Liste yanıtları & cap'ler

Liste uçlarında sayfalama (cursor/offset) parametresi yoktur — her uç, tüm listeyi tek yanıtta, uca özel bir üst sınıra (cap) kadar döner:

CapAşılırsa
products/list2000yanıt truncated işaretlenir + total döner
categories/list500
users/get200
  • Tam senkron için listeyi pollama — listeyi bir kez çek + cache'le, sonra event'lerle güncel tut (product.*, category.*, user.* oluşturma/güncelleme/silmede gelir).
  • Tekil kayıt için liste yerine */get?id= uçlarını kullan (API Genel Bakış).
  • Parser'ını yeni alanlara toleranslı yaz — bkz. Versiyonlama & Deprecation.

Development store kotaları (yalnız DEV)

LimitDeğer
Cap (geliştirici başına)3 dev store
Lifespan30 gün; dev portal'a her login'de 30 gün uzar
Süre doluncapanel girişi kapanır (end < now); login'de geri açılır
Sahiplikown-only — dev store yalnız kendi eklentilerini görür/kurar (developerId eşleşmeli)
ÜcretDEV'de billing kapalı → eklenti ücretsiz kurulur (checkout yok)
E-postaotomatik doğrulanır; @restomenum.com (ve alt domain) yasak
Kayıtdev hesabı yalnız portal create-dev-store ile açılır (client signUp reddedilir)
Tüm bunlar yalnız DEV ortamında geçerli; PROD'da kayıt + yayınlı-eklenti kurulumu normaldir. Akış: Test Mağazaları (Dev Stores).

Özet — geliştirici kontrol listesi

  • 429 → backoff + retry; dev'de testleri ölçülü tetikle (5/dk + 200/gün).
  • Webhook endpoint'in: hızlı 2xx, imza doğrula, id ile idempotent.
  • Action/hook: 8/5 sn içinde yanıt; geç = timeout/iptal.
  • Dev store: 3 adet, 30 gün (login'de uzar), yalnız kendi eklentilerin.