Middle
API üçün Gözləyici (Waiter) nümunəsini necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
API üçün Gözləyici (Waiter) nümunəsinin tətbiqi, resursun vəziyyətini və ya əməliyyatın yerinə yetirilməsini dövrü şəkildə yoxlamaq və ya gözlənilən şərt yerinə yetənə və ya təyin olunmuş zaman aşımı keçənə qədər davam etməkdən ibarətdir.
Əsas addımlar:
- Yoxlanılacaq şərti müəyyənləşdirin: API və ya resursun hansı vəziyyətinin "hazır" sayıldığını aydın şəkildə başa düşün (məsələn, sorğunun vəziyyəti dəyişdi, yeni qeyd əlavə olundu, gözlənilən məlumatlar qaytarıldı).
- Yoxlama mexanizmini seçin: Vəziyyətin necə yoxlanacağını müəyyən edin. Bu, eyni endpoint-ə təkrarlanan sorğu göndərmək, xüsusi status endpoint-ə sorğu göndərmək və ya cavabın məzmununu yoxlamaq ola bilər.
- Gözləmə parametrlərini qurun: Maksimum gözləmə vaxtını (timeout) və yoxlamalar arasındakı intervalı təyin edin.
- Döngünü tətbiq edin: Vəziyyəti müəyyən interval ilə yoxlayan döngü yaradın.
- Çıxış şərtlərini idarə edin:
- Gözlənilən şərt yerinə yetəndə çıxış edin.
- Timeout keçəndə çıxış edin və istisna və ya səhv bildirin.
- Xəta idarəetməsi: Döngü daxilində yoxlama zamanı mümkün olan səhvləri əvvəlcədən planlaşdırın (məsələn, API müvəqqəti əlçatan olmaya bilər).
Nümunə pseudokod:
# 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-ə sorğu göndər
if check_condition(response, expected_condition): # Hazır olma şərtini yoxla
return True # Şərt yerinə yetirildi
sleep(interval_seconds) # Növbəti yoxlamadan əvvəl gözlə
current_time = current_time # Cari vaxtı yenilə
raise TimeoutError("Resurs vaxtında hazır deyil") # Timeout
# check_condition(response, expected_condition):
# API cavabına əsaslanan hazır olma şərtinin yoxlanması loqikası
# Məsələn, return response['status'] == 'ready'
Python və requests kitabxanası ilə nümunə:
import requests
import time
def wait_for_status(url, expected_status, timeout=60, interval=5):
"""
Endpoint müəyyən statusu qaytarana qədər gözləyir.
"""
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} statusu alındı.")
return True
except requests.exceptions.RequestException as e:
print(f"[{time.strftime('%H:%M:%S')}] Sorğu xətası: {e}. Yenidən cəhd {interval} saniyə sonra.")
time.sleep(interval)
raise TimeoutError(f"{expected_status} statusunu {timeout} saniyə ərzində almaq mümkün olmadı.")
# İstifadə nümunəsi
# try:
# wait_for_status("http://api.example.com/status", 200)
# except TimeoutError as e:
# print(e)
Xüsusi tətbiq API-nin xüsusiyyətlərinə və test tələblərinə bağlıdır. Timeout və intervalların konfiqurasiyasında elastiklik təmin etmək və timeout keçdikdə məlumatlandırıcı mesajlar vermək vacibdir.