Middle+
Kuidas rakendada API jaoks Waiter mustrit?
sobes.tech AI
Vastus AI-lt
Waiter muster API jaoks realiseeritakse perioodilise päringute saatmise teel teenusele, kuni täidetakse teatud tingimus või aegumistähtaeg saab läbi.
Peamised komponendid:
- Sihtpäring (Target Request): Päring, mida täidetakse ja mille tulemust kontrollitakse.
- Lõpetamise tingimus (Completion Condition): Loogiline avaldis, mis määrab, millal ooteaeg tuleb lõpetada. See võib olla teatud vastuse staatus (näiteks 200 OK), vastuse kehas olev väärtus, ressursi olemasolu või puudumine jne.
- Päringu intervall (Polling Interval): Aeg kahe järjestikuse sihtpäringu vahel.
- Aegumistähtaeg (Timeout): Maksimaalne aeg, mille jooksul Waiter saadab päringuid enne, kui see lõpetab vea.
Python näide kasutades requests raamatukogu:
import time
import requests
def wait_for_resource(url, expected_status=200, interval=5, timeout=60):
"""
API jaoks Waiter mustri realiseerimine.
Args:
url (str): Ressursi URL, milleks oodata.
expected_status (int): Oodatav HTTP vastuse staatus.
interval (int): Ooteintervall sekundites.
timeout (int): Maksimaalne ooteaeg sekundites.
Raises:
TimeoutError: Kui aegumistähtaeg saab läbi enne oodatud oleku saavutamist.
Exception: Kui päringul tekib viga.
"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url)
if response.status_code == expected_status:
print(f"Resurss aadressil {url} on saadaval oodatud staatuses {expected_status}.")
return response
else:
print(f"Resurss aadressil {url} ei ole saadaval. Praegune staatus: {response.status_code}. Ootan...")
except requests.exceptions.RequestException as e:
print(f"Viga päringul {url}: {e}. Ootan...")
time.sleep(interval)
raise TimeoutError(f"Ooteaeg {url} jaoks on lõppenud.")
# Näide kasutamisest:
# try:
# wait_for_resource("http://example.com/some_resource", expected_status=200, interval=10, timeout=120)
# except (TimeoutError, Exception) as e:
# print(f"Waiter viga: {e}")
Variatsioonid:
- Vastuskeha sisu põhjal ooteaeg: Kontrollib teatud väärtust või struktuuri JSON/XML vastuses.
- Eksponentsiaalne tagasikäik: Intervalli suurendamine, et vähendada koormust teenusele sagedaste тайм-аутide korral.
- Parameetritega Waiter: Võimalus edastada parameetreid sihtpäringusse.
- Tingimuslik Waiter: Kasutatakse keerulisemaid tingimusi, näiteks staatuse ja vastuse sisu kombinatsiooni.
Waiter muster on kasulik asünkroonsete operatsioonide lõpetamise, teenuse valmisoleku pärast juurutamist või teiste protsesside poolt genereeritud andmete ilmumise ootamiseks.