Limites de débit
Chastify limite le débit du trafic de l'API d'extension afin de protéger les sessions de verrouillage, le stockage, les périphériques et les systèmes de notification.
Les limites de débit s'appliquent à la fois au trafic du pont iframe acheminé via Chastify et aux appels backend effectués avec des clés API développeur.
Compartiments d'extension actuels
| Compartiment | Limite | Points de terminaison typiques |
|---|---|---|
| Lecture | 300/min | session.get, state.get, metadata.get, lectures de fichiers, état d'action régulière |
| Écriture | 120/min | Écritures d'état du backend, mises à jour des métadonnées, configuration des actions régulières, création d'exécution vérifiée par le serveur |
| Téléversement | 10/min | Téléversements des fichiers d'exécution et d'installation |
| Action | 30/min | Actions de verrouillage, commandes de l'appareil, journaux personnalisés, notifications personnalisées, règlement des résultats vérifiés par le serveur |
| Jeton | 30/min | Génération du jeton d'authentification/lancement de session Iframe |
Les limites sont évaluées sur une période d'une minute.
Il s'agit des paramètres par défaut de la plateforme. Les administrateurs/propriétaires de sites Chastify peuvent configurer des paramètres spécifiques pour chaque extension, notamment pour les extensions officielles ou celles particulièrement populaires. Ces paramètres sont enregistrés dans la configuration de l'application et mis en cache temporairement dans Redis pour accélérer la résolution des requêtes.
Les compartiments de chargement et d'action sont volontairement plus restrictifs que les compartiments de lecture/état. Les chargements consomment de l'espace de stockage et de la bande passante. Les actions peuvent affecter l'état du verrou, les appareils, les notifications et l'historique visible par l'utilisateur.
Comment les clés sont comptées
Les clés de limitation de débit comprennent :
- L'identifiant utilisateur Chastify a été authentifié lorsque l'interface utilisateur de première partie appelle un point de terminaison.
- Identifiant de la clé API développeur lorsque votre backend appelle les points de terminaison de session d'extension
- Adresse IP pour les chemins anonymes ou non authentifiés
- la cible
sessionIdoulockIdlorsqu'elle est disponible
Cela signifie qu'une session d'extension bruyante ne doit pas consommer la totalité du budget global de l'API d'extension.
Comportement recommandé du client
Votre iframe ou votre backend doit traiter 429 Too Many Requests comme une condition normale pouvant être réessayée.
Utilisez un mécanisme de rétroaction exponentielle en cas d'échecs répétés :
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");
}
Guide de pontage Iframe
Pour les clients de pont iframe :
- Mettez en cache les résultats
session.getpour toute la durée de vie de la page, sauf si vous avez besoin de données de verrouillage actualisées. - Stockez localement les modifications temporaires de l'interface utilisateur et envoyez les modifications fiables à votre serveur.
- Évitez les boucles d'interrogation rapides. Privilégiez les lectures déclenchées par l'utilisateur ou les intervalles de rafraîchissement lents.
Exemple de sauvegarde côté serveur avec annulation de rebond :
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);
}
Guide d'extension du backend
Pour les appels backend avec une clé API développeur :
- Les actions privilégiées doivent être vérifiées par le serveur et déclenchées par l'utilisateur.
- Utilisez
PUT/PATCH /api/extensions/sessions/:sessionId/stateuniquement depuis votre backend avec les identifiants de l'API développeur. - Ne réessayez pas les actions de verrouillage à l'aveuglette si la première tentative a peut-être réussi.
- Rendre le règlement du jeu/défi idempotent avec un identifiant de course.
- Ne téléchargez les fichiers que lorsque l'utilisateur soumet explicitement un fichier.
- Stockez vos propres enregistrements externes si vous avez besoin d'une télémétrie à plus haute fréquence.
N’augmentez jamais les limites d’actions pour compenser les appels de navigateur non vérifiés. Le code iframe du navigateur n’est pas fiable. Les mutations sensibles doivent être validées par votre serveur avant d’appeler Chastify.
Dans quel compartiment dois-je m'attendre ?
Exemples courants :
GET /api/extensions/sessions/:sessionIdutilise le compartiment de lecture.GET /api/extensions/sessions/:sessionId/stateutilise le compartiment de lecture.PUT/PATCH /api/extensions/sessions/:sessionId/stateutilise le compartiment d'écriture.POST /api/extensions/sessions/:sessionId/filesutilise le compartiment de téléchargement.POST /api/extensions/sessions/:sessionId/actionutilise le compartiment d'actions.POST /api/extensions/sessions/:sessionId/device-commandutilise le compartiment d'actions.POST /api/extensions/sessions/:sessionId/logs/customutilise le compartiment d'actions.POST /api/extensions/sessions/:sessionId/notifications/customutilise le compartiment d'actions.GET /api/extensions/sessions/:sessionId/authutilise le compartiment à jetons.
Seaux granulaires du futur
Les catégories actuelles sont larges. Chastify pourrait les subdiviser davantage à mesure que l'API développeur se développe, par exemple :
state.writemetadata.writelock.actionnotifications.customdevice.commandfiles.upload
Les limites par extension peuvent être augmentées par les administrateurs/propriétaires de site Chastify lorsqu'une extension officielle ou approuvée à fort volume en a un besoin légitime. Concevez les clients de manière à ce que la gestion 429 soit générique et ne dépende pas des noms de compartiment exacts ni des valeurs par défaut fixes de la plateforme.