Middle+
API uchun Waiter shablonini qanday amalga oshirish mumkin?
sobes.tech AI
AIdan javob
API uchun Waiter naqshini amalga oshirish uchun xizmatga muntazam so'rov yuborish orqali amalga oshiriladi, shart bajarilguncha yoki timeout o'tguncha.
Asosiy komponentlar:
- Maqsad so'rov (Target Request): Bajariladigan va natijasi tekshiriladigan so'rov.
- Yakunlash sharti (Completion Condition): Kutish tugashi kerak bo'lgan vaqti belgilovchi mantiqiy ifoda. Bu javob holati (masalan, 200 OK), javob matnida qiymat, resurs mavjudligi yoki mavjud emasligi va boshqalar bo'lishi mumkin.
- So'rovlar oralig'i (Polling Interval): Ketma-ket so'rovlar orasidagi vaqt.
- Timeout: Waiter so'rovlarni bajarishda maksimal vaqt, undan so'ng xato bilan tugaydi.
Python'da requests kutubxonasi yordamida amalga oshirilgan misol:
import time
import requests
def wait_for_resource(url, expected_status=200, interval=5, timeout=60):
"""
API uchun Waiter naqshining amalga oshirilishi.
Args:
url (str): Kutayotgan resurs URL.
expected_status (int): Kutayotgan HTTP holati.
interval (int): So'rovlar orasidagi kutish vaqti sekundlarda.
timeout (int): Maksimal kutish vaqti sekundlarda.
Raises:
TimeoutError: Agar timeout o'tib ketgan bo'lsa.
Exception: Agar so'rovda xato yuz bersa.
"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url)
if response.status_code == expected_status:
print(f"{url} manzilidagi resurs, kutilgan holat {expected_status} bilan mavjud.")
return response
else:
print(f"{url} manzilidagi resurs mavjud emas. Hozirgi holat: {response.status_code}. Kutilyapti...")
except requests.exceptions.RequestException as e:
print(f"{url} ga so'rovda xato: {e}. Kutilyapti...")
time.sleep(interval)
raise TimeoutError(f"{url} uchun kutish vaqti tugadi.")
# Misol uchun foydalanish
# try:
# wait_for_resource("http://example.com/some_resource", expected_status=200, interval=10, timeout=120)
# except (TimeoutError, Exception) as e:
# print(f"Waiter xatosi: {e}")
Implementatsiya variantlari:
- Javob matniga asoslangan kutish: JSON/XML javob matnida ma'lum bir qiymat yoki tuzilmani tekshirish.
- Eksponensial orqaga qaytish (Backoff): Tez-tez timeoutlar bo'lsa, xizmatga yukni kamaytirish uchun kutish intervalini oshirish.
- Parametrli Waiter: Maqsad so'roviga parametrlar yuborish imkoniyati.
- Shartli kutish: Ko'proq murakkab shartlardan foydalanish, masalan, holat va javob mazmunining kombinatsiyasi.
Waiter naqshi asinxron operatsiyalar tugashini, xizmatning joylashishini yoki boshqa jarayonlar tomonidan yaratilgan ma'lumotlarning paydo bo'lishini kutish uchun foydalidir.