Skip to main content

Nopeusrajoitukset

Chastify asettaa laajennus-API-liikenteen nopeusrajoituksia lukitusistuntojen, tallennustilan, laitteiden ja ilmoitusjärjestelmien suojaamiseksi.

Nopeusrajoitukset koskevat sekä Chastify:n kautta reititettyä iframe-siltaliikennettä että kehittäjän API-avaimilla tehtyjä taustakutsuja.

Nykyiset laajennusosastot

KauhaRajaTyypilliset päätepisteet
Luettu300/minsession.get, state.get, metadata.get, tiedostojen luku, normaalin toiminnon tila
Kirjoitus120/minTaustajärjestelmän tilan kirjoitukset, metatietojen päivitykset, normaalin toiminnon konfigurointi, palvelimen varmentama suorituksen luonti
Lataa10/minSuorituksenaikaisten ja asennustiedostojen lataukset
Toiminto30/minLukitustoiminnot, laitekomennot, mukautetut lokit, mukautetut ilmoitukset, palvelimen vahvistamien tulosten selvitys
Tunniste30/minIframe-istunnon käynnistys/todennustunnuksen luonti

Rajoja arvioidaan yhden minuutin aikana.

note

Nämä ovat alustan oletusasetukset. Chastify:n ylläpitäjät/sivuston omistajat voivat määrittää laajennuskohtaisia ​​ohituksia virallisille tai epätavallisen suuren käyttömäärän laajennuksille. Ohitukset tallennetaan laajennussovelluksen määrityksiin ja tallennetaan lyhyeksi välimuistiin Redisissä nopeaa pyyntöpolkuhakua varten.

info

Lähetys- ja toimintosäilöjen rajat ovat tarkoituksella tiukemmat kuin luku-/tilasäilöjen rajat. Lähetykset kuluttavat tallennustilaa ja kaistanleveyttä. Toiminnot voivat vaikuttaa lukitustilaan, laitteisiin, ilmoituksiin ja käyttäjän näkyvään historiaan.

Miten avaimet lasketaan

Nopeusrajoitusavaimiin kuuluvat:

  • todennettu Chastify-käyttäjätunnus, kun ensimmäisen osapuolen käyttöliittymä kutsuu päätepistettä
  • Kehittäjän API-avaimen tunnus, kun taustajärjestelmäsi kutsuu laajennusistunnon päätepisteitä
  • IP-osoite anonyymeille tai todentamattomille poluille
  • kohde sessionId tai lockId, kun se on saatavilla

Tämä tarkoittaa, että yhden meluisan laajennusistunnon ei pitäisi kuluttaa koko laajennus-API-budjettia.

IFramesi tai taustajärjestelmäsi tulisi käsitellä 429 Too Many Requests:ta normaalina uudelleenyritysehtona.

Käytä eksponentiaalista peruutusta toistuville virheille:

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 Bridgen ohjeet

iframe bridge -asiakkaille:

  • Tallenna session.get-tulokset välimuistiin sivun koko elinkaaren ajan, ellet tarvitse uusia lukitustietoja.
  • Tallenna ohimenevät käyttöliittymämuutokset paikallisesti ja lähetä luotetut muutokset taustajärjestelmällesi.
  • Vältä nopeita silmukoita. Suosi käyttäjän laukaisemia lukukertoja tai hitaita päivitysvälejä.

Esimerkki palautumattomasta taustajärjestelmän tallennuksesta:

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);
}

Taustapään laajennusohjeet

Kehittäjän API-avaimella varustetuille taustapään kutsuille:

  • Pidä etuoikeutetut toiminnot palvelimen varmentamia ja käyttäjän käynnistämiä.
  • Käytä PUT/PATCH /api/extensions/sessions/:sessionId/state:ta vain taustajärjestelmässäsi kehittäjän API-tunnuksilla.
  • Älä yritä lukitustoimintoja uudelleen sokkona, jos ensimmäinen yritys on saattanut onnistua.
  • Tee pelin/haasteen ratkaisusta idempotentti suoritustunnuksella.
  • Lataa tiedostoja vain, kun käyttäjä lähettää tiedoston erikseen.
  • Tallenna omat ulkoiset tietueesi, jos tarvitset korkeamman taajuuden telemetriaa.
warning

Älä koskaan nosta toimintorajoja kompensoidaksesi vahvistamattomia selainkutsuja. Selaimen iframe-koodiin ei luoteta. Taustajärjestelmän tulisi vahvistaa arkaluontoiset mutaatiot ennen Chastify-kutsua.

Minkä ämpärin minun pitäisi odottaa?

Yleisiä esimerkkejä:

  • GET /api/extensions/sessions/:sessionId käyttää lukusäiliötä.
  • GET /api/extensions/sessions/:sessionId/state käyttää lukusäiliötä.
  • PUT/PATCH /api/extensions/sessions/:sessionId/state käyttää kirjoitussäiliötä.
  • POST /api/extensions/sessions/:sessionId/files käyttää lähetyssäiliötä.
  • POST /api/extensions/sessions/:sessionId/action käyttää toimintosäiliötä.
  • POST /api/extensions/sessions/:sessionId/device-command käyttää toimintosäiliötä.
  • POST /api/extensions/sessions/:sessionId/logs/custom käyttää toimintosäiliötä.
  • POST /api/extensions/sessions/:sessionId/notifications/custom käyttää toimintosäiliötä.
  • GET /api/extensions/sessions/:sessionId/auth käyttää token-säiliötä.

Tulevaisuuden rakeiset kauhat

Nykyiset kategoriat ovat laajoja. Chastify saattaa jakaa ne edelleen kehittäjärajapinnan kasvaessa, esimerkiksi:

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

Chastify-järjestelmänvalvojat/sivuston omistajat voivat nostaa laajennuskohtaisia ​​rajoituksia, kun virallisella tai hyväksytyllä suuren volyymin laajennuksella on siihen perusteltu tarve. Suunnittele asiakasohjelmat siten, että 429-käsittely on yleistä eikä riipu tarkoista säilönimistä tai kiinteistä alustan oletusasetuksista.