API Hata Yönetimi: Rate Limit ve Dayanıklılık Stratejileri

Yapay zeka sağlayıcıları (OpenAI, Gemini, Anthropic), altyapılarını korumak için sıkı Rate Limit (istek sınırı) kuralları uygular. Bu sınırlar aşıldığında alınan 429 Too Many Requests hatasını doğru yönetmek, kesintisiz bir kullanıcı deneyimi için hayati önem taşır.

Neden Hata Alırız?
  • TPM (Tokens Per Minute): Dakika başına işlenen toplam kelime/token sınırı.
  • RPM (Requests Per Minute): Dakika başına gönderilen toplam istek sayısı.
  • Server Error (5xx): Modelin aşırı yüklenmesi veya geçici kesintiler.

1) Altın Standart: Exponential Backoff Algoritması

Hata aldığınızda hemen tekrar denemek yerine, her denemede bekleme süresini katlayarak artırmak (2s, 4s, 8s...) sunucunun rahatlamasına zaman tanır.

Python: Robust Retry Logic
import time
import random

def call_ai_api_with_retry(prompt, max_retries=5):
    retry_count = 0
    while retry_count < max_retries:
        try:
            # API Çağrısı Simülasyonu
            return api_client.generate(prompt)
        except Exception as e:
            if "429" in str(e): # Rate Limit Hatası
                wait_time = (2 ** retry_count) + random.random()
                print(f"Sınır aşıldı. {wait_time:.2f} saniye bekleniyor...")
                time.sleep(wait_time)
                retry_count += 1
            else:
                raise e # Diğer hataları fırlat
    return None

2) PHP ile Hata Yakalama (Graceful Degradation)

PHP tarafında cURL kullanarak hata kodlarını kontrol etmek ve kullanıcıya anlamlı geri bildirim vermek önemlidir.

PHP: cURL Error Handling
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 429) {
    // Retry-After header'ını kontrol et
    header('Retry-After: 10');
    die("Şu an çok fazla istek var, lütfen 10 saniye sonra tekrar deneyin.");
} elseif ($httpCode !== 200) {
    error_log("AI API Hatası: " . $httpCode);
    die("Teknik bir sorun oluştu, ekip bilgilendirildi.");
}

3) Çözüm Önerileri ve Best Practices

  • Caching (Önbellekleme): Aynı sorular için API'ye tekrar gitmek yerine Redis veya veritabanı kullanarak yanıtları önbelleğe alın.
  • Queue (Kuyruk) Yapısı: Yoğun işlemleri anlık yapmak yerine arka planda çalışan bir kuyruk sistemine (Örn: RabbitMQ, Celery) devredin.
  • Monitoring: Hata oranlarını takip edin. Eğer 429 hataları %5'i geçiyorsa, API planınızı yükseltme vaktiniz gelmiş demektir.
💡 Uzman Notu: "Jitter" eklemek (bekleme süresine küçük rastgelelikler katmak), çok sayıda istemcinin aynı anda bekleme süresini bitirip tekrar sunucuya yüklenmesini engeller.