# Hata İşleme

## Birleşik Hata Yanıtı Formatı

Tüm API hataları, birleşik bir JSON biçimi döndürür:

```json
{
  "code": 2010,
  "message": "Insufficient credits",
  "suggestion": "Please top up your account at https://platform.tripo3d.ai",
  "request_id": "req_abc123"
}
```

| Alan | Tür | Açıklama |
| :-: | :-: | :-: |
| code | tamsayı | Hata kodu |
| message | dize | Hata açıklaması |
| suggestion | dize | Önerilen düzeltme |
| request_id | dize | Sorun giderme için benzersiz istek tanımlayıcı |

## HTTP Durum Kodları

| Durum Kodu | Anlamı | Açıklama |
| :-: | :-: | :-: |
| 200 | Başarı | İstek başarıyla işlendi |
| 400 | Geçersiz parametreler | Gerekli parametreler eksik veya hatalı biçimlendirilmiş |
| 401 | Kimliği doğrulanmamış | API Key eksik veya geçersiz |
| 403 | Yetersiz izinler | Kaynağa erişim izniniz yok veya kredileriniz yetersiz |
| 404 | Kaynak bulunamadı | İstenen görev veya kaynak mevcut değil |
| 429 | Çok fazla istek | Hız limiti aşıldı. İstek sıklığınızı azaltın |
| 500 | Servis hatası | Dahili sunucu hatası. Daha sonra tekrar deneyin |

## Hata Kodu Referansı

| Hata Kodu | Anlamı | Önerilen İşleme |
| :-: | :-: | :-: |
| 1000 | Geçersiz API Key | API Key'nin doğru mu yoksa silinmiş mi olduğunu kontrol edin |
| 1001 | Yetkisiz | İstek başlığının `Authorization` içerip içermediğini kontrol edin |
| 2000 | Oran sınırı aşıldı | Üstel geri çekilmeyle istek sıklığını azaltın ve yeniden denemeleri uygulayın |
| 2002 | Desteklenmeyen istek parametresi | İstek gövde alanı adlarının ve değerlerinin belgelerle eşleşip eşleşmediğini kontrol edin |
| 2003 | Boş giriş dosyası | Yüklenen dosyanın boş olmadığını ve geçerli bir format kullandığını doğrulayın |
| 2004 | Desteklenmeyen dosya türü | Dosya formatının desteklenen listede olup olmadığını kontrol edin |
| 2008 | İçerik politikası ihlali | Yasaklanmış kelime veya görsellerden kaçınmak için giriş içeriğini değiştirin |
| 2010 | Yetersiz kredi | Konsolda kredi yükleme |
| 2015 | Sürüm kullanımdan kaldırıldı | En son API sürümüne yükseltin |
| 2018 | Model çok karmaşık | Giriş modelinin karmaşıklığını veya poligon sayısını azaltın |

## Hata İşleme Örnekleri

### Python

```python
import time
import requests

def call_api_with_retry(url, headers, payload=None, max_retries=3):
    for attempt in range(max_retries):
        if payload:
            response = requests.post(url, headers=headers, json=payload)
        else:
            response = requests.get(url, headers=headers)

        if response.status_code == 200:
            return response.json()

        if response.status_code == 429:
            wait = 2 ** attempt
            print(f"Rate limit triggered. Retrying in {wait} seconds...")
            time.sleep(wait)
            continue

        error = response.json()
        raise Exception(
            f"API error [{error['code']}]: {error['message']} "
            f"(suggestion: {error.get('suggestion', 'none')})"
        )

    raise Exception("Maximum retry attempts exhausted")
```

### JavaScript

```javascript
async function callApiWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.ok) {
      return await response.json();
    }

    if (response.status === 429) {
      const wait = 2 ** attempt * 1000;
      console.log(`Rate limit triggered. Retrying in ${wait / 1000} seconds...`);
      await new Promise(resolve => setTimeout(resolve, wait));
      continue;
    }

    const error = await response.json();
    throw new Error(
      `API error [${error.code}]: ${error.message} (suggestion: ${error.suggestion || "none"})`
    );
  }

  throw new Error("Maximum retry attempts exhausted");
}
```

## Strateji Önerilerini Yeniden Deneyin

429 hız sınırı ve 500 hizmet hatası gibi yeniden denenebilir hatalar için üstel bir geri çekilme stratejisi kullanın:

1. İlk yeniden deneme: 1 saniye bekleyin
2. İkinci yeniden deneme: 2 saniye bekleyin
3. Üçüncü yeniden deneme: 4 saniye bekleyin
4. Maksimum yeniden deneme sayısını 5 veya daha az tutun

400, 401 ve 403 gibi yeniden denenemeyen hatalar için doğrudan bir istisna oluşturun ve temel sorunu düzeltin.
