Limites de l'API
Bonnes pratiques et recommandations pour l'utilisation de l'API Kiwisocial.
Vue d'ensemble
L'API Kiwisocial est conçue pour offrir une expérience fluide et performante. Pour garantir la qualité du service pour tous les utilisateurs, nous recommandons de suivre les bonnes pratiques décrites ci-dessous.
Note : Actuellement, l'API Kiwisocial ne dispose pas de limites de taux strictes, mais un usage responsable est attendu.
Bonnes pratiques
Optimisation des requêtes
Pagination
Utilisez la pagination pour récupérer les données par lots :
- Fil d'actualité : Utilisez le paramètre
offsetetpage_size(recommandé : 20) - Messages : Chargez les messages par pages avec
offset_upetoffset_down - Notifications : Récupérez les notifications progressivement
Mise en cache
Implémentez un système de cache pour réduire les requêtes :
- Mettez en cache les données de profil utilisateur
- Conservez les tokens d'authentification en mémoire
- Stockez temporairement les résultats de recherche
- Rafraîchissez le cache uniquement lorsque nécessaire
Requêtes groupées
Évitez les requêtes multiples inutiles :
- Utilisez des endpoints qui retournent plusieurs données à la fois
- Évitez de faire une requête pour chaque élément d'une liste
- Planifiez vos requêtes pour minimiser les allers-retours
Gestion des erreurs
Codes de réponse HTTP
| Code | Action recommandée |
|---|---|
200 |
Succès - Traiter les données normalement |
204 |
Aucune donnée - Afficher un message approprié à l'utilisateur |
400 |
Requête invalide - Vérifier les paramètres envoyés |
401 |
Non autorisé - Rafraîchir le token ou redemander une connexion |
402 |
Identifiants incorrects - Vérifier les credentials |
500 |
Erreur serveur - Réessayer avec un délai exponentiel |
Stratégie de retry
En cas d'erreur serveur (500), implémentez une stratégie de réessai :
// Exemple de stratégie avec délai exponentiel
function retryRequest(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return makeRequest(url);
} catch (error) {
if (error.code !== 500 || i === maxRetries - 1) {
throw error;
}
// Délai exponentiel : 1s, 2s, 4s
wait(Math.pow(2, i) * 1000);
}
}
}
Limites de contenu
Longueur des messages
| Type | Limite |
|---|---|
| Publication (post) | 600 caractères |
| Message privé | 3000 caractères |
| Bio utilisateur | 150 caractères |
Fichiers médias
- Images : Formats supportés JPG, PNG, GIF
- Vidéos : Formats supportés MP4, MOV
- Audio : Formats supportés MP3
- Taille : Respecter les limites serveur (variable selon la configuration)
Recommandations par fonctionnalité
Fil d'actualité
- Récupérez 20 publications à la fois (paramètre
page_size) - Utilisez le
offsetpour la pagination infinie - Implémentez un pull-to-refresh avec un délai minimal (ex: 5 secondes)
- Ne rechargez pas le fil automatiquement trop fréquemment
Messagerie
- Utilisez la pagination pour charger les messages anciens
- Implémentez un polling intelligent (ex: toutes les 10-30 secondes)
- Considérez l'utilisation de websockets si disponible pour le temps réel
- Ne chargez les conversations que lorsqu'elles sont ouvertes
Notifications
- Récupérez les notifications par lots
- Utilisez les notifications push au lieu de polling constant
- Marquez les notifications comme lues dès qu'elles sont consultées
- Limitez la fréquence de vérification des notifications
Recherche
- Implémentez un debounce pour les recherches en temps réel (ex: 500ms)
- Ne lancez pas de recherche pour moins de 3 caractères
- Limitez les résultats affichés (pagination)
- Mettez en cache les résultats de recherche récents
Sécurité
Protection des tokens
- Stockage sécurisé : Utilisez Keychain (iOS) ou KeyStore (Android)
- Ne pas exposer : Ne loggez jamais les tokens dans la console
- HTTPS uniquement : Toutes les requêtes doivent passer par HTTPS
- Rotation régulière : Rafraîchissez les tokens avant expiration
Validation des données
- Validez toujours les données côté client avant envoi
- Échappez les contenus utilisateur pour éviter les injections
- Vérifiez les types et formats attendus
- Ne faites pas confiance aux données reçues sans validation
Monitoring et logs
Logs applicatifs
Implémentez un système de logging pour :
- Tracer les erreurs API et leurs codes
- Monitorer les temps de réponse
- Identifier les endpoints problématiques
- Détecter les patterns d'usage anormaux
Métriques recommandées
- Taux de succès : Pourcentage de requêtes réussies
- Temps de réponse : Latence moyenne par endpoint
- Taux d'erreur : Nombre d'erreurs par type
- Utilisation du cache : Hit rate du cache local
Exemple d'implémentation
Client API avec bonnes pratiques
class KiwisocialAPI {
constructor() {
this.baseURL = 'https://kiwisocial.eu/mobile_api/';
this.token = null;
this.cache = new Map();
this.requestQueue = [];
}
// Gestion du cache
getCached(key, maxAge = 300000) { // 5 minutes
const cached = this.cache.get(key);
if (cached && Date.now() - cached.timestamp < maxAge) {
return cached.data;
}
return null;
}
setCache(key, data) {
this.cache.set(key, {
data: data,
timestamp: Date.now()
});
}
// Requête avec retry
async request(endpoint, options = {}) {
const maxRetries = 3;
let lastError;
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(
this.baseURL + endpoint,
{
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
}
);
if (!response.ok) {
if (response.status === 401) {
// Rafraîchir le token
await this.refreshToken();
continue;
}
throw new Error(`HTTP ${response.status}`);
}
return await response.json();
} catch (error) {
lastError = error;
if (i < maxRetries - 1) {
// Délai exponentiel
await new Promise(r =>
setTimeout(r, Math.pow(2, i) * 1000)
);
}
}
}
throw lastError;
}
// Feed avec pagination
async getFeed(offset = null, pageSize = 20) {
const cacheKey = `feed_${offset}_${pageSize}`;
const cached = this.getCached(cacheKey);
if (cached) return cached;
const params = new URLSearchParams({
session_id: this.token,
page_size: pageSize
});
if (offset) params.append('offset', offset);
const data = await this.request(`feeds?${params}`);
this.setCache(cacheKey, data);
return data;
}
}