Middle+
API için Waiter desenini nasıl uygularız?
sobes.tech yapay zeka
AI'dan gelen yanıt
API için Waiter deseni, belirli bir koşul sağlanana veya zaman aşımı gerçekleşene kadar hizmete periyodik olarak istek gönderilerek uygulanır.
Ana bileşenler:
- Hedef İstek (Target Request): Gerçekleştirilen ve sonucunun kontrol edildiği istek.
- Tamamlama Koşulu (Completion Condition): Beklemenin ne zaman sona ermesi gerektiğini belirleyen mantıksal ifade. Bu, belirli bir yanıt durumu (örneğin, 200 OK), yanıt gövdesinde bir değer, bir kaynağın varlığı veya yokluğu vb. olabilir.
- Sorgulama Aralığı (Polling Interval): Ardışık hedef istekleri arasındaki zaman.
- Zaman Aşımı (Timeout): Waiter'ın hatayla sona ermeden önce yapacağı maksimum istek süresi.
Python'da requests kütüphanesi kullanılarak yapılan bir örnek:
import time
import requests
def wait_for_resource(url, expected_status=200, interval=5, timeout=60):
"""
API için Waiter deseninin uygulanması.
Args:
url (str): Beklenecek kaynağın URL'si.
expected_status (int): Beklenen HTTP durum kodu.
interval (int): İstekler arasındaki bekleme süresi (saniye).
timeout (int): Maksimum bekleme süresi (saniye).
Raises:
TimeoutError: Zaman aşımı gerçekleşirse.
Exception: İstek sırasında hata oluşursa.
"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url)
if response.status_code == expected_status:
print(f"{url} adresindeki kaynak, beklenen durum {expected_status} ile erişilebilir.")
return response
else:
print(f"{url} adresindeki kaynak erişilebilir değil. Mevcut durum: {response.status_code}. Bekleniyor...")
except requests.exceptions.RequestException as e:
print(f"{url} adresine istek sırasında hata: {e}. Bekleniyor...")
time.sleep(interval)
raise TimeoutError(f"{url} kaynağı için zaman aşımı gerçekleşti.")
# Kullanım örneği
# try:
# wait_for_resource("http://example.com/some_resource", expected_status=200, interval=10, timeout=120)
# except (TimeoutError, Exception) as e:
# print(f"Waiter hatası: {e}")
Uygulama varyasyonları:
- Yanıt gövdesine göre bekleme: JSON/XML yanıt gövdesinde belirli bir değer veya yapının kontrol edilmesi.
- Üssel geri dönüş (Exponential Backoff): Sık zaman aşımı durumlarında hizmet üzerindeki yükü azaltmak için denemeler arasındaki aralığın artırılması.
- Parametreli Waiter: Hedef isteğe parametrelerin iletilmesi.
- Koşullu Waiter: Durum ve yanıt içeriğinin daha karmaşık koşullarla kullanılması, örneğin durum ve içeriğin kombinasyonu.
Waiter deseni, asenkron işlemlerin tamamlanmasını, dağıtımdan sonra hizmetin kullanılabilirliğini veya diğer süreçler tarafından üretilen verilerin ortaya çıkmasını beklemek için faydalıdır.