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
| Kauha | Raja | Tyypilliset päätepisteet |
|---|---|---|
| Luettu | 300/min | session.get, state.get, metadata.get, tiedostojen luku, normaalin toiminnon tila |
| Kirjoitus | 120/min | Taustajärjestelmän tilan kirjoitukset, metatietojen päivitykset, normaalin toiminnon konfigurointi, palvelimen varmentama suorituksen luonti |
| Lataa | 10/min | Suorituksenaikaisten ja asennustiedostojen lataukset |
| Toiminto | 30/min | Lukitustoiminnot, laitekomennot, mukautetut lokit, mukautetut ilmoitukset, palvelimen vahvistamien tulosten selvitys |
| Tunniste | 30/min | Iframe-istunnon käynnistys/todennustunnuksen luonti |
Rajoja arvioidaan yhden minuutin aikana.
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.
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
sessionIdtailockId, kun se on saatavilla
Tämä tarkoittaa, että yhden meluisan laajennusistunnon ei pitäisi kuluttaa koko laajennus-API-budjettia.
Suositeltu asiakaskäyttäytyminen
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.
Ä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/:sessionIdkäyttää lukusäiliötä.GET /api/extensions/sessions/:sessionId/statekäyttää lukusäiliötä.PUT/PATCH /api/extensions/sessions/:sessionId/statekäyttää kirjoitussäiliötä.POST /api/extensions/sessions/:sessionId/fileskäyttää lähetyssäiliötä.POST /api/extensions/sessions/:sessionId/actionkäyttää toimintosäiliötä.POST /api/extensions/sessions/:sessionId/device-commandkäyttää toimintosäiliötä.POST /api/extensions/sessions/:sessionId/logs/customkäyttää toimintosäiliötä.POST /api/extensions/sessions/:sessionId/notifications/customkäyttää toimintosäiliötä.GET /api/extensions/sessions/:sessionId/authkäyttää token-säiliötä.
Tulevaisuuden rakeiset kauhat
Nykyiset kategoriat ovat laajoja. Chastify saattaa jakaa ne edelleen kehittäjärajapinnan kasvaessa, esimerkiksi:
state.writemetadata.writelock.actionnotifications.customdevice.commandfiles.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.