Ga naar hoofdinhoud

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

BucketLimietTypische eindpunten
Lezen300/minsession.get, state.get, metadata.get, bestandslezingen, status van reguliere actie
Schrijven120/minBackend-status schrijven, metadata-updates, configuratie van reguliere acties, server-geverifieerde aanmaak van uitvoeringen
Uploaden10/minUploaden van runtime- en installatiebestanden
Actie30/minVergrendelingsacties, apparaatopdrachten, aangepaste logboeken, aangepaste meldingen, servergeverifieerde resultaatafhandeling
Token30/minGeneratie van een Iframe-sessiestart-/authenticatietoken

De limieten worden binnen een tijdsbestek van één minuut geëvalueerd.

notitie

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.

info

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 sessionId of lockId indien beschikbaar

Dit betekent dat één lawaaierige extensiesessie niet het volledige budget van de globale extensie-API mag verbruiken.

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.get op 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/state alleen 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.
waarschuwing

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/:sessionId gebruikt de leesbucket.
  • GET /api/extensions/sessions/:sessionId/state gebruikt de leesbucket.
  • PUT/PATCH /api/extensions/sessions/:sessionId/state gebruikt de schrijfbucket.
  • POST /api/extensions/sessions/:sessionId/files gebruikt de uploadbucket.
  • POST /api/extensions/sessions/:sessionId/action gebruikt de actiebucket.
  • POST /api/extensions/sessions/:sessionId/device-command gebruikt de actiebucket.
  • POST /api/extensions/sessions/:sessionId/logs/custom gebruikt de actiebucket.
  • POST /api/extensions/sessions/:sessionId/notifications/custom gebruikt de actiebucket.
  • GET /api/extensions/sessions/:sessionId/auth gebruikt de tokenbucket.

Toekomstige granulaatbakken

De huidige categorieën zijn breed. Chastify kan ze verder opsplitsen naarmate de Developer API groeit, bijvoorbeeld:

  • state.write
  • metadata.write
  • lock.action
  • notifications.custom
  • device.command
  • files.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.