Skip to content

Gestion d'Erreurs

Référence complète des codes d'erreur et réponses de l'API Sharokey lors de l'utilisation de nos SDK officiels.

📋 Aperçu

Nos SDK gèrent automatiquement tous les scénarios d'erreur et fournissent des objets d'erreur structurés. Cette référence montre les formats d'erreur que vous recevrez et comment les gérer efficacement.

SDK Officiels :

🔴 Format de Réponse d'Erreur

Toutes les erreurs API suivent une structure JSON cohérente que nos SDK analysent automatiquement :

json
{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Description d'erreur lisible par l'humain",
    "details": {
      "field": "nom_du_champ",
      "value": "valeur_invalide",
      "additional_context": "Plus d'informations"
    }
  },
  "timestamp": "2025-01-14T10:30:00Z",
  "request_id": "req_abcd1234efgh5678"
}

🚨 Erreurs d'Authentification

Token Invalide

json
{
  "success": false,
  "error": {
    "code": "AUTHENTICATION_ERROR",
    "message": "Token invalide ou expiré"
  }
}

Causes Communes :

  • Token non configuré dans le SDK
  • Token malformé ou corrompu
  • Token a expiré

Gestion SDK : Tous les SDK détectent les erreurs d'authentification et fournissent un feedback clair sur les problèmes de token.

Permissions Insuffisantes

json
{
  "success": false,
  "error": {
    "code": "PERMISSION_DENIED",
    "message": "Permissions insuffisantes pour cette opération",
    "details": {
      "required_scope": "secrets:create",
      "token_scopes": ["secrets:read", "stats:read"]
    }
  }
}

Solution : Utilisez un token avec les portées appropriées pour vos opérations.

⚠️ Erreurs de Validation

Validation du Contenu

json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Le champ content est requis",
    "details": {
      "content": ["Le champ content est requis"],
      "expiration": ["Doit être entre 1 et 1000 heures"]
    }
  }
}

Problèmes de Validation Courants :

  • content : Le contenu du secret ne peut pas être vide
  • hours : Doit être entre 1 et 1000
  • maximum_views : Doit être entre 1 et 10
  • description : Maximum 255 caractères
  • password : Minimum 4 caractères si fourni

Erreurs de Pièces Jointes

json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "La taille totale des pièces jointes doit être inférieure à 10MB"
  }
}

Limites de Fichiers :

  • Maximum de pièces jointes : 10 fichiers par secret
  • Limite de taille totale : 10MB par secret
  • Extensions supportées : pdf, jpg, jpeg, png, docx, txt

🔍 Erreurs de Ressource

Secret Non Trouvé

json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Secret non trouvé ou expiré"
  }
}

Causes Communes :

  • Secret a été supprimé
  • Secret a expiré naturellement
  • Mauvais slug fourni
  • Aucune permission pour accéder au secret

🚦 Erreurs de Limitation de Taux

json
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Trop de requêtes. Veuillez réessayer plus tard."
  }
}

Limites de Taux :

  • Authentification : 10 requêtes par minute
  • Opérations secrets : 30 requêtes par minute
  • Requêtes de tokens d'entreprise : 5 requêtes par minute

Gestion SDK : Tous les SDK implémentent une logique de nouvelle tentative automatique avec backoff exponentiel.

💰 Erreurs de Quota

json
{
  "success": false,
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Vous avez atteint le nombre maximum de secrets autorisés pour votre plan actuel."
  }
}

Solution : Améliorez votre plan ou attendez la réinitialisation du quota.

🖥️ Erreurs Serveur

Erreur Serveur Interne

json
{
  "success": false,
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Une erreur serveur interne s'est produite",
    "details": {
      "error_id": "err_abcd1234",
      "support_message": "Veuillez contacter le support avec cet ID d'erreur"
    }
  }
}

Service Indisponible

json
{
  "success": false,
  "error": {
    "code": "SERVICE_UNAVAILABLE",
    "message": "Service temporairement indisponible",
    "details": {
      "retry_after": 300,
      "maintenance_window": false
    }
  }
}

🛠️ Gestion d'Erreurs SDK

Gestion d'Erreurs CLI C#

bash
# Le CLI fournit des messages d'erreur clairs et des codes de sortie
sharokey create "content" --hours 25000
# Erreur : Les heures doivent être entre 1 et 1000 (code de sortie 1)

# Sortie JSON pour les scripts
sharokey create "content" --hours 25000 --json
# {"success": false, "error": {"code": "VALIDATION_ERROR", ...}}

Gestion d'Erreurs JavaScript SDK

javascript
try {
  const secret = await client.createSecret("content", {
    hours: 25000  // Invalide
  });
} catch (error) {
  console.log(error.code);        // "VALIDATION_ERROR"
  console.log(error.message);     // Message lisible par l'humain
  console.log(error.details);     // Détails de validation
  
  // Gérer des erreurs spécifiques
  if (error.code === 'QUOTA_EXCEEDED') {
    console.log('Améliorez votre plan pour créer plus de secrets');
  }
}

Gestion d'Erreurs Python SDK

python
try:
    secret = await client.create("content", hours=25000)
except sharokey.ValidationError as e:
    print(f"Validation échouée : {e.details}")
except sharokey.QuotaExceededError as e:
    print(f"Quota dépassé : {e.message}")
except sharokey.SharokeyError as e:
    print(f"Erreur API : {e.code} - {e.message}")

🔧 Meilleures Pratiques de Gestion d'Erreurs

Dégradation Gracieuse

javascript
async function createSecretWithFallback(content, options) {
  try {
    return await client.createSecret(content, options);
  } catch (error) {
    if (error.code === 'QUOTA_EXCEEDED') {
      // Fallback : Stocker localement ou mettre en file d'attente pour plus tard
      return await storeLocally(content, options);
    }
    throw error; // Re-lancer d'autres erreurs
  }
}
python
async def create_secret_with_retry(content, **options):
    max_retries = 3
    for attempt in range(max_retries):
        try:
            return await client.create(content, **options)
        except sharokey.RateLimitError as e:
            if attempt < max_retries - 1:
                await asyncio.sleep(2 ** attempt)  # Backoff exponentiel
                continue
            raise
        except sharokey.SharokeyError:
            raise  # Ne pas réessayer sur d'autres erreurs

Journalisation d'Erreurs

javascript
function logSharokeyError(error, context = {}) {
  const logEntry = {
    timestamp: new Date().toISOString(),
    level: 'ERROR',
    source: 'sharokey-sdk',
    error: {
      code: error.code,
      message: error.message,
      details: error.details
    },
    context
  };
  
  console.error(JSON.stringify(logEntry));
  
  // Alerter sur les erreurs critiques
  if (error.code === 'INTERNAL_ERROR') {
    notifySupport(logEntry);
  }
}

Messages Conviviaux

javascript
function getErrorMessage(error) {
  const messages = {
    'VALIDATION_ERROR': 'Veuillez vérifier votre saisie et réessayer.',
    'QUOTA_EXCEEDED': 'Vous avez atteint votre limite de plan. Considérez un upgrade.',
    'RATE_LIMIT_EXCEEDED': 'Trop de requêtes. Veuillez attendre un moment.',
    'NOT_FOUND': 'Le secret que vous cherchez n\'existe pas ou a expiré.',
    'AUTHENTICATION_ERROR': 'Veuillez vérifier la configuration de votre token API.'
  };
  
  return messages[error.code] || 'Une erreur inattendue s\'est produite. Veuillez réessayer.';
}

🔗 Documentation Liée


Tous les SDK implémentent une gestion automatique des erreurs, une logique de nouvelle tentative et fournissent des objets d'erreur structurés pour un débogage facile.

Released under the MIT License.