Snelheidslimieten
Chastify beperkt het API-verkeer van de extensie om vergrendelingssessies, opslag, apparaten en notificatiesystemen te beschermen.
Er gelden snelheidslimieten voor zowel iframe bridge-verkeer dat via Chastify wordt gerouteerd als voor backend-aanroepen die worden gedaan met API-sleutels van ontwikkelaars.
Huidige uitbreidingsbuckets
| Bucket | Limiet | Typische eindpunten |
|---|---|---|
| Lezen | 300/min | session.get, state.get, metadata.get, bestandslezingen, status van reguliere actie |
| Schrijven | 120/min | Backend-status schrijven, metadata-updates, configuratie van reguliere acties, server-geverifieerde aanmaak van uitvoeringen |
| Uploaden | 10/min | Uploaden van runtime- en installatiebestanden |
| Actie | 30/min | Vergrendelingsacties, apparaatopdrachten, aangepaste logboeken, aangepaste meldingen, servergeverifieerde resultaatafhandeling |
| Token | 30/min | Generatie van een Iframe-sessiestart-/authenticatietoken |
De limieten worden binnen een tijdsbestek van één minuut geëvalueerd.
Dit zijn de standaardinstellingen van het platform. Beheerders/site-eigenaren van Chastify kunnen per extensie overrides configureren voor officiële extensies of extensies met een ongebruikelijk hoog aanvraagvolume. Overrides worden opgeslagen in de configuratie van de extensie-app en kortstondig in Redis gecached voor snelle opzoeking van het aanvraagpad.
De limieten voor uploads en acties zijn opzettelijk kleiner dan die voor lees-/statusgegevens. Uploads verbruiken opslagruimte en bandbreedte. Acties kunnen de vergrendelingsstatus, apparaten, meldingen en de voor de gebruiker zichtbare geschiedenis beïnvloeden.
Hoe worden sleutels geteld?
De volgende sleutels kunnen worden gebruikt voor snelheidsbeperking:
- geauthenticeerde Chastify-gebruikers-ID wanneer de first-party UI een endpoint aanroept
- De API-sleutel-ID van de ontwikkelaar wordt gebruikt wanneer uw backend de sessie-eindpunten van de extensie aanroept.
- IP-adres voor anonieme of niet-geauthenticeerde verbindingen
- het doel
sessionIdoflockIdindien beschikbaar
Dit betekent dat één lawaaierige extensiesessie niet het volledige budget van de globale extensie-API mag verbruiken.
Aanbevolen cliëntgedrag
Uw iframe of backend moet 429 Too Many Requests behandelen als een normale, herhaalbare situatie.
Gebruik exponentiële backoff bij herhaalde fouten:
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");
}
Iframe Brugbegeleiding
Voor iframe bridge-clients:
- Sla de resultaten van
session.getop voor de levensduur van de pagina, tenzij u actuele vergrendelingsgegevens nodig hebt. - Sla tijdelijke UI-wijzigingen lokaal op en verstuur betrouwbare wijzigingen naar uw backend.
- Vermijd het uitvoeren van polling in snelle lussen. Geef de voorkeur aan door de gebruiker geactiveerde leesbewerkingen of langzame verversingsintervallen.
Voorbeeld van een backend-opslag met debounce-functie:
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);
}
Richtlijnen voor backend-extensies
Voor backend-aanroepen met een ontwikkelaars-API-sleutel:
- Zorg ervoor dat bevoegde acties door de server worden geverifieerd en door de gebruiker worden geactiveerd.
- Gebruik
PUT/PATCH /api/extensions/sessions/:sessionId/statealleen vanuit uw backend met API-referenties voor ontwikkelaars. - Probeer vergrendelingsacties niet blindelings opnieuw uit te voeren als de eerste poging mogelijk wel gelukt is.
- Maak de game/challenge-afwikkeling idempotent met een run-ID.
- Upload bestanden alleen wanneer de gebruiker expliciet een bestand indient.
- Bewaar uw eigen externe gegevens als u telemetrie met een hogere frequentie nodig hebt.
Verhoog nooit de actielimieten om niet-geverifieerde browseraanroepen te compenseren. Browser-iframecode wordt niet vertrouwd. Gevoelige mutaties moeten door uw backend worden gevalideerd voordat Chastify wordt aangeroepen.
Welke emmer kan ik verwachten?
Veelvoorkomende voorbeelden:
GET /api/extensions/sessions/:sessionIdgebruikt de leesbucket.GET /api/extensions/sessions/:sessionId/stategebruikt de leesbucket.PUT/PATCH /api/extensions/sessions/:sessionId/stategebruikt de schrijfbucket.POST /api/extensions/sessions/:sessionId/filesgebruikt de uploadbucket.POST /api/extensions/sessions/:sessionId/actiongebruikt de actiebucket.POST /api/extensions/sessions/:sessionId/device-commandgebruikt de actiebucket.POST /api/extensions/sessions/:sessionId/logs/customgebruikt de actiebucket.POST /api/extensions/sessions/:sessionId/notifications/customgebruikt de actiebucket.GET /api/extensions/sessions/:sessionId/authgebruikt de tokenbucket.
Toekomstige granulaatbakken
De huidige categorieën zijn breed. Chastify kan ze verder opsplitsen naarmate de Developer API groeit, bijvoorbeeld:
state.writemetadata.writelock.actionnotifications.customdevice.commandfiles.upload
Limieten per extensie kunnen worden verhoogd door Chastify-beheerders/site-eigenaren wanneer een officiële of goedgekeurde extensie met een hoog volume daar een legitieme behoefte aan heeft. Ontwerp clients zodanig dat de afhandeling van 429 generiek is en niet afhankelijk is van exacte bucketnamen of vaste platformstandaarden.