Skip to main content

Ograničenja brzine

Chastify API promet proširenja za ograničenja brzine za zaštitu sesija zaključavanja, pohrane, uređaja i sustava obavještavanja.

Ograničenja brzine primjenjuju se i na promet iframe mosta usmjeren kroz Chastify i na pozadinske pozive izvršene s ključevima Developer API-ja.

Trenutne kutije proširenja

KantaOgraničenjeTipične krajnje točke
Čitanje300/minsession.get, state.get, metadata.get, čitanje datoteka, status redovne akcije
Pisanje120/minZapisivanje stanja pozadine, ažuriranja metapodataka, konfiguracija regularnih radnji, stvaranje pokretanja provjereno od strane poslužitelja
Prijenos10/minPrijenos datoteka za vrijeme izvođenja i postavki
Akcija30/minZaključavanje akcija, naredbi uređaja, prilagođenih zapisnika, prilagođenih obavijesti, poravnanja rezultata provjerenih od strane poslužitelja
Token30/minPokretanje iframe sesije/generiranje tokena za autorizaciju

Ograničenja se procjenjuju tijekom jedne minute.

note

Ovo su zadane postavke platforme. Chastify administratori/vlasnici web-mjesta mogu konfigurirati nadjačavanja za svako proširenje za službena ili neuobičajeno velika proširenja. Nadjačavanja se pohranjuju u konfiguraciji aplikacije proširenja i nakratko se predmemoriraju u Redisu za brzo pretraživanje puta zahtjeva.

info

Segmenti za prijenos i radnje namjerno su uži od segmenata za čitanje/stanje. Prijenosi troše prostor za pohranu i propusnost. Radnje mogu utjecati na stanje zaključavanja, uređaje, obavijesti i povijest vidljivu korisniku.

Kako se broje ključevi

Ključevi ograničenja brzine uključuju:

  • autentificirani korisnički ID Chastify kada korisničko sučelje prve strane pozove krajnju točku
  • ID ključa API-ja razvojnog programera kada vaš backend poziva krajnje točke sesije proširenja
  • IP adresa za anonimne ili neautentificirane putove
  • cilj sessionId ili lockId kada je dostupan

To znači da jedna bučna sesija proširenja ne bi trebala potrošiti cijeli globalni proračun API-ja proširenja.

Vaš iframe ili backend trebaju tretirati 429 Too Many Requests kao normalan uvjet ponovnog pokušaja.

Koristite eksponencijalno odgađanje za ponovljene kvarove:

async function callWithBackoff<T>(fn: () => Promise<T>, attempts = 4): Promise<T> {
let delayMs = 500;

for (let attempt = 1; attempt <= attempts; attempt += 1) {
try {
return await fn();
} catch (error: any) {
const status = error?.status ?? error?.response?.status;
if (status !== 429 || attempt === attempts) throw error;

await new Promise((resolve) => setTimeout(resolve, delayMs));
delayMs *= 2;
}
}

throw new Error("request_failed");
}

Smjernice za most Iframe

Za klijente iframe mosta:

  • Spremi rezultate session.get za cijeli životni vijek stranice, osim ako vam trebaju novi podaci o zaključavanju.
  • Lokalno pohranite privremene promjene korisničkog sučelja i pošaljite pouzdane promjene na svoj backend.
  • Izbjegavajte brze petlje ispitivanja. Preferirajte čitanja koja pokreće korisnik ili spore intervale osvježavanja.

Primjer spremanja u pozadini s odskokom:

let saveTimer: number | undefined;

function scheduleStateSave(data: Record<string, unknown>) {
window.clearTimeout(saveTimer);
saveTimer = window.setTimeout(() => {
fetch("/your-extension-backend/state", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
}).catch(console.error);
}, 500);
}

Smjernice za pozadinska proširenja

Za pozadinske pozive s ključem API-ja za razvojne programere:

  • Neka privilegirane radnje budu provjerene od strane poslužitelja i pokrenute od strane korisnika.
  • Koristite PUT/PATCH /api/extensions/sessions/:sessionId/state samo iz pozadinskog sustava s vjerodajnicama Developer API-ja.
  • Nemojte naslijepo ponovno pokušavati zaključavanje ako je prvi pokušaj možda uspio.
  • Učinite idempotentnim obračun igre/izazova s ​​ID-om pokretanja.
  • Prenesi datoteke samo kada korisnik izričito pošalje datoteku.
  • Pohranite vlastite vanjske zapise ako vam je potrebna telemetrija više frekvencije.
warning

Nikada ne povećavajte ograničenja akcija kako biste kompenzirali neprovjerene pozive preglednika. Kod iframea preglednika nije pouzdan. Osjetljive mutacije treba potvrditi vaš backend prije pozivanja Chastify.

Koju kantu mogu očekivati?

Uobičajeni primjeri:

  • GET /api/extensions/sessions/:sessionId koristi spremnik za čitanje.
  • GET /api/extensions/sessions/:sessionId/state koristi spremnik za čitanje.
  • PUT/PATCH /api/extensions/sessions/:sessionId/state koristi spremnik za pisanje.
  • POST /api/extensions/sessions/:sessionId/files koristi spremnik za prijenos.
  • POST /api/extensions/sessions/:sessionId/action koristi spremnik radnji.
  • POST /api/extensions/sessions/:sessionId/device-command koristi spremnik radnji.
  • POST /api/extensions/sessions/:sessionId/logs/custom koristi spremnik radnji.
  • POST /api/extensions/sessions/:sessionId/notifications/custom koristi spremnik radnji.
  • GET /api/extensions/sessions/:sessionId/auth koristi spremnik tokena.

Buduće granularne kante

Trenutne kategorije su široke. Chastify ih može dodatno podijeliti kako Developer API raste, na primjer:

  • state.write
  • metadata.write
  • lock.action
  • notifications.custom
  • device.command
  • files.upload

Ograničenja po ekstenziji mogu povećati administratori/vlasnici web-mjesta Chastify kada službena ili odobrena ekstenzija velikog broja korisnika ima legitimnu potrebu. Dizajnirajte klijente tako da je rukovanje 429 generičko i ne ovisi o točnim nazivima spremnika ili fiksnim zadanim postavkama platforme.