Sobes.tech
Middle+

API üçün Waiter nümunəsini necə həyata keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

API üçün Waiter nümunəsi, xidmətə müntəzəm sorğular göndərməklə həyata keçirilir, müəyyən şərt yerinə yetirilənə və ya vaxt limiti keçənə qədər.

Əsas komponentlər:

  1. Hədəf sorğu (Target Request): İcra olunan və nəticəsi yoxlanılan sorğu.
  2. Tamamlama şərti (Completion Condition): Gözləmənin nə vaxt bitməli olduğunu müəyyən edən məntiqi ifadə. Bu, müəyyən bir cavab vəziyyəti (məsələn, 200 OK), cavabın bədənində dəyər, resursun mövcudluğu və ya yoxluğu və s. ola bilər.
  3. Sorğu intervalı (Polling Interval): Ardıcıl sorğular arasındakı vaxt.
  4. Vaxt limiti (Timeout): Waiter-in sorğuları yerinə yetirəcəyi maksimum vaxt, bu vaxt keçdikdə isə səhvlə sona çatır.

Python-da requests kitabxanası ilə həyata keçirilmiş nümunə:

import time
import requests

def wait_for_resource(url, expected_status=200, interval=5, timeout=60):
    """
    API üçün Waiter nümunəsinin həyata keçirilməsi.

    Args:
        url (str): Gözlənilən resursun URL-si.
        expected_status (int): Gözlənilən HTTP statusu.
        interval (int): Sorğular arasındakı interval (saniyə).
        timeout (int): Maksimum gözləmə vaxtı (saniyə).

    Raises:
        TimeoutError: Əgər vaxt limiti keçərsə.
        Exception: Əgər sorğu zamanı xəta baş verərsə.
    """
    start_time = time.time()

    while time.time() - start_time < timeout:
        try:
            response = requests.get(url)
            if response.status_code == expected_status:
                print(f"{url} ünvanındakı resurs, gözlənilən status {expected_status} ilə mövcuddur.")
                return response
            else:
                print(f"{url} ünvanındakı resurs mövcud deyil. Cari status: {response.status_code}. Gözlənilir...")
        except requests.exceptions.RequestException as e:
            print(f"{url} ünvanına sorğuda xəta: {e}. Gözlənilir...")
        
        time.sleep(interval)

    raise TimeoutError(f"{url} üçün gözləmə vaxtı bitdi.")

# İstifadə nümunəsi
# try:
#     wait_for_resource("http://example.com/some_resource", expected_status=200, interval=10, timeout=120)
# except (TimeoutError, Exception) as e:
#     print(f"Waiter xətası: {e}")

İcra variantları:

  • Cavab bədəninə əsaslanan gözləmə: JSON/XML cavab bədənində müəyyən dəyər və ya strukturun yoxlanması.
  • Eksponensial geri dönüş (Backoff): Tez-tez vaxt limiti keçərsə, xidmətə yükü azaltmaq üçün gözləmə intervalinin artırılması.
  • Parametrli Waiter: Hədəf sorğusuna parametrlərin ötürülməsi.
  • Şərtli gözləmə: Daha mürəkkəb şərtlərin, məsələn, vəziyyət və cavabın məzmununun birləşməsinin istifadə olunması.

Waiter nümunəsi asinxron əməliyyatların tamamlanmasını, xidmətin yerləşdirildikdən sonra əlçatanlığını və ya digər proseslər tərəfindən yaradılan məlumatların yaranmasını gözləmək üçün faydalıdır.