Middle+
Kā īstenot Waiter modeli API?
sobes.tech AI
Atbilde no AI
Waiter šablons API gadījumā tiek īstenots, periodiski sūtot pieprasījumus uz pakalpojumu, līdz tiek izpildīts noteikts nosacījums vai nebeidzas laika limits.
Galvenās sastāvdaļas:
- Mērķa pieprasījums (Target Request): Pieprasījums, kas tiek veikts un kura rezultāts tiek pārbaudīts.
- Nosacījums pabeigšanai (Completion Condition): Loģiska izteiksme, kas nosaka, kad jāpārtrauc gaidīšana. Tas var būt noteikts atbildes statuss (piemēram, 200 OK), vērtība atbildes ķermenī, resursa esamība vai neesamība utt.
- Gaidīšanas intervāls (Polling Interval): Laiks starp secīgajiem mērķa pieprasījumiem.
- Laika limits (Timeout): Maksimālais laiks, kurā Waiter sūtīs pieprasījumus, pirms tas beidzas ar kļūdu.
Python piemērs, izmantojot requests bibliotēku:
import time
import requests
def wait_for_resource(url, expected_status=200, interval=5, timeout=60):
"""
Waiter šablona īstenošana API.
Args:
url (str): Resursa URL, kurā gaidīt.
expected_status (int): Sagaidāmais HTTP statuss.
interval (int): Gaidīšanas intervāls sekundēs.
timeout (int): Maksimālais gaidīšanas laiks sekundēs.
Raises:
TimeoutError: Ja laika limits beidzas pirms sagaidītā stāvokļa sasniegšanas.
Exception: Ja notiek kļūda pieprasījumā.
"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url)
if response.status_code == expected_status:
print(f"Resurss adresē {url} ir pieejams ar sagaidāmo statusu {expected_status}.")
return response
else:
print(f"Resurss adresē {url} nav pieejams. Pašreizējais statuss: {response.status_code}. Gaidu...")
except requests.exceptions.RequestException as e:
print(f"Kļūda pieprasījumā {url}: {e}. Gaidu...")
time.sleep(interval)
raise TimeoutError(f"Gaidīšanas laiks {url} ir beidzies.")
# Piemērs lietošanai:
# try:
# wait_for_resource("http://example.com/some_resource", expected_status=200, interval=10, timeout=120)
# except (TimeoutError, Exception) as e:
# print(f"Waiter kļūda: {e}")
Variācijas:
- Atbildes ķermeņa satura balstīta gaidīšana: Pārbauda noteiktu vērtību vai struktūru JSON/XML atbildē.
- Eksponenciāla palielināšana: Palielina intervālu starp mēģinājumiem, lai samazinātu slodzi uz pakalpojumu biežu тайм-аутu gadījumā.
- Parametrizēts Waiter: Iespēja nodot parametrus mērķa pieprasījumam.
- Nosacījuma Waiter: Izmanto sarežģītākus nosacījumus, piemēram, statusa un atbildes satura kombināciju.
Waiter šablons ir noderīgs, lai gaidītu asenhronisku operāciju pabeigšanu, pakalpojuma gatavību pēc izvietošanas vai datu parādīšanos, ko ģenerē citi procesi.