Middle+
API үчүн Waiter үлгүсүн кантип ишке ашыруу керек?
sobes.tech AI
AIден жооп
Waiter үлгісі API үшін сервисті сұрауларды кезең-кезеңмен жіберу арқылы жүзеге асырылады, ол шарт орындалғанша немесе тайм-аут аяқталғанша.
Негізгі компоненттері:
- Мақсатты сұрау (Target Request): Орындап жатқан сұрау және оның нәтижесін тексеру.
- Аяқтау шарты (Completion Condition): Логикалық өрнек, ол күтуді қашан тоқтату керектігін анықтайды. Бұл жауаптың белгілі бір статусы (мысалы, 200 OK), жауап денесіндегі мәні, ресурс бар немесе жоқ болуы және т.б. болуы мүмкін.
- Күтудің интервалдары (Polling Interval): Бір сұраудан екіншісіне дейінгі уақыт.
- Тайм-аут (Timeout): Waiter сұрауларды жіберуді тоқтататын ең ұзақ уақыт.
Python-да requests кітапханасын пайдаланып мысал:
import time
import requests
def wait_for_resource(url, expected_status=200, interval=5, timeout=60):
"""
API үшін Waiter үлгісін жүзеге асыру.
Args:
url (str): Күту үшін ресурс URL-і.
expected_status (int): Күтілетін HTTP статусы.
interval (int): Сұраулар арасындағы интервал (секундта).
timeout (int): Ең ұзақ күтім уақыты (секундта).
Raises:
TimeoutError: Тайм-аут аяқталса.
Exception: Сұрау кезінде қате болса.
"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url)
if response.status_code == expected_status:
print(f"{url} мекенжайындағы ресурс қол жетімді және күтілген статус {expected_status}.")
return response
else:
print(f"{url} мекенжайындағы ресурс қол жетімді емес. Ағымдағы статус: {response.status_code}. Күтемін...")
except requests.exceptions.RequestException as e:
print(f"{url} сұрау кезінде қате: {e}. Күтемін...")
time.sleep(interval)
raise TimeoutError(f"{url} үшін күтудің тайм-ауты аяқталды.")
# Қолдану мысалы:
# try:
# wait_for_resource("http://example.com/some_resource", expected_status=200, interval=10, timeout=120)
# except (TimeoutError, Exception) as e:
# print(f"Waiter қатесі: {e}")
Әртүрлілік:
- Жауап денесінің мазмұнына негізделген күтім: JSON/XML жауаптарындағы белгілі бір мән немесе құрылымды тексеру.
- Экспоненциалды арттыру: Қайталау интервалын арттыру, жиі тайм-ауттар кезінде жүктемені азайту үшін.
- Параметрленген Waiter: Мақсатты сұрауға параметрлерді беру мүмкіндігі.
- Шартты Waiter: Күрделірек шарттарды қолдану, мысалы, статустың және жауап мазмұнының комбинациясы.
Waiter үлгісі асинхронды операциялардың аяқталуын, қызметтің дайын болуын күтуде пайдалы, орналастырудан кейін немесе басқа процестермен жасалған деректердің пайда болуын бақылау үшін.