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
| Kanta | Ograničenje | Tipične krajnje točke |
|---|---|---|
| Čitanje | 300/min | session.get, state.get, metadata.get, čitanje datoteka, status redovne akcije |
| Pisanje | 120/min | Zapisivanje stanja pozadine, ažuriranja metapodataka, konfiguracija regularnih radnji, stvaranje pokretanja provjereno od strane poslužitelja |
| Prijenos | 10/min | Prijenos datoteka za vrijeme izvođenja i postavki |
| Akcija | 30/min | Zaključavanje akcija, naredbi uređaja, prilagođenih zapisnika, prilagođenih obavijesti, poravnanja rezultata provjerenih od strane poslužitelja |
| Token | 30/min | Pokretanje iframe sesije/generiranje tokena za autorizaciju |
Ograničenja se procjenjuju tijekom jedne minute.
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.
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
sessionIdililockIdkada 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.
Preporučeno ponašanje klijenta
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.getza 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/statesamo 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.
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/:sessionIdkoristi spremnik za čitanje.GET /api/extensions/sessions/:sessionId/statekoristi spremnik za čitanje.PUT/PATCH /api/extensions/sessions/:sessionId/statekoristi spremnik za pisanje.POST /api/extensions/sessions/:sessionId/fileskoristi spremnik za prijenos.POST /api/extensions/sessions/:sessionId/actionkoristi spremnik radnji.POST /api/extensions/sessions/:sessionId/device-commandkoristi spremnik radnji.POST /api/extensions/sessions/:sessionId/logs/customkoristi spremnik radnji.POST /api/extensions/sessions/:sessionId/notifications/customkoristi spremnik radnji.GET /api/extensions/sessions/:sessionId/authkoristi spremnik tokena.
Buduće granularne kante
Trenutne kategorije su široke. Chastify ih može dodatno podijeliti kako Developer API raste, na primjer:
state.writemetadata.writelock.actionnotifications.customdevice.commandfiles.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.