Sobes.tech
Middle

API için Bekleyici (Waiter) desenini nasıl uygularsınız?

sobes.tech yapay zeka

AI'dan gelen yanıt

API için bekleme (Waiter) deseninin uygulanması, kaynağın durumunu veya bir işlemin yürütülmesini döngüsel olarak kontrol etmeyi ve beklenen koşul sağlanana veya belirlenen zaman aşımı dolana kadar devam etmeyi içerir.

Ana adımlar:

  1. Kontrol edilecek koşulun tanımlanması: API veya kaynağın hangi durumunun "hazır" sayılacağı açıkça anlaşılmalı (örneğin, isteğin durumu değişti, yeni bir kayıt oluştu, beklenen veriler döndü).
  2. Kontrol mekanizmasının seçilmesi: Durumun nasıl kontrol edileceğine karar verilmeli. Bu, aynı uç noktaya tekrar tekrar istek göndermek, özel bir durum uç noktasına istek yapmak veya yanıt içeriğini kontrol etmek olabilir.
  3. Bekleme parametrelerinin ayarlanması: Maksimum bekleme süresi (zaman aşımı) ve kontroller arasındaki aralık belirlenmeli.
  4. Döngünün uygulanması: Durumu belirli aralıklarla kontrol eden bir döngü oluşturulmalı.
  5. Çıkış koşullarının yönetimi:
    • Beklenen koşul sağlandığında çıkış.
    • Zaman aşımı dolduğunda çıkış ve istisna veya hata ile bildirme.
  6. Hata yönetimi: Döngü içindeki kontrol sırasında olası hataların önceden planlanması (örneğin, API geçici olarak erişilemez durumda olabilir).

Örnek pseudocode:

# wait_for_resource_ready(api_endpoint, expected_condition, timeout_seconds, interval_seconds)

start_time = current_time
while current_time - start_time < timeout_seconds:
    response = make_api_request(api_endpoint) # API'ye istek yap

    if check_condition(response, expected_condition): # Hazır olma koşulunu kontrol et
        return True # Koşul sağlandı

    sleep(interval_seconds) # Bir sonraki kontrol öncesi bekle
    current_time = current_time # Güncel zamanı güncelle

raise TimeoutError("Kaynak zaman aşımında hazır değil") # Zaman aşımı

# check_condition(response, expected_condition):
# API yanıtına göre hazır olma koşulunu kontrol eden mantık
# Örneğin, return response['status'] == 'ready'

Python ve requests kütüphanesi kullanılarak örnek:

import requests
import time

def wait_for_status(url, expected_status, timeout=60, interval=5):
    """
    Belirli bir durumu döndürene kadar bekler.
    """
    start_time = time.time()

    while time.time() - start_time < timeout:
        try:
            response = requests.get(url)
            if response.status_code == expected_status:
                print(f"[{time.strftime('%H:%M:%S')}] {expected_status} durumu alındı.")
                return True
        except requests.exceptions.RequestException as e:
            print(f"[{time.strftime('%H:%M:%S')}] İstek hatası: {e}. Tekrar denenecek {interval} saniye sonra.")

        time.sleep(interval)

    raise TimeoutError(f"{expected_status} durumunu {timeout} saniye içinde alamadı.")

# Kullanım örneği
# try:
#     wait_for_status("http://api.example.com/status", 200)
# except TimeoutError as e:
#     print(e)

Spesifik uygulama, API’nin özelliklerine ve test gereksinimlerine bağlıdır. Zaman aşımı ve aralık ayarlarında esneklik sağlamak ve zaman aşımı durumunda bilgilendirici mesajlar vermek önemlidir.