Middle
როგორ განვახორციელოთ ელოდოს (Waiter) ნიმუში API-სთვის?
sobes.tech AI
პასუხი AI-სგან
API-ის მოლოდინის ნიმუში (Waiter) განხორციელება მოიცავს რესურსის ან ოპერაციის მდგომარეობის ციკლურ შემოწმებას მანამ, სანამ არ მიაღწევთ ელოდებოდით პირობას ან მითითებულ დროის გასვლის.
ძირითადი ნაბიჯები:
- შემოწმებული პირობების განსაზღვრა: მკაფიოდ გაიგეთ, რა მდგომარეობა ითვლება "მზად" (მაგალითად, მოთხოვნის სტატუსის ცვლილება, ახალი ჩანაწერის გამოჩენა, ელოდებოდით მონაცემების დაბრუნება).
- შემოწმების მექანიზმის არჩევა: განსაზღვრეთ, როგორ განხორციელდება მდგომარეობის შემოწმება. ეს შეიძლება იყოს იგივე ბოლო წერტილზე განმეორებითი მოთხოვნა, სპეციალურ სტატუსის ბოლო წერტილზე მოთხოვნა ან პასუხის შიგთავსის შემოწმება.
- მოლოდინის პარამეტრების დაყენება: განსაზღვრეთ მაქსიმალური მოლოდინის დრო (тайმ-აუტი) და ინტერვალი შემოწმებებს შორის.
- ციკლის განხორციელება: შექმენით ციკლი, რომელიც შეასრულებს მდგომარეობის შემოწმებას მითითებულ ინტერვალზე.
- გამოსვლის პირობების დამუშავება:
- ელოდებოდით პირობას მიაღწიეთ, გამოდიხართ.
- დროის გასვლის შემდეგ, გამოდიხართ გამონაკლისით ან შეცდომით.
- შეცდომების დამუშავება შემოწმების დროს: წინასწარ განსაზღვრეთ შესაძლო შეცდომების დამუშავება ციკლში (მაგალითად, API-ის დროებით მიუწვდომლობის შემთხვევები).
პსევდოკოდის მაგალითი:
# 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-ზე მოთხოვნის განხორციელება
if check_condition(response, expected_condition): # მზადყოფნის პირობების შემოწმება
return True # პირობა შესრულდა
sleep(interval_seconds) # შემდეგი შემოწმების წინ დასვენება
current_time = current_time # მიმდინარე დრო განახლება
raise TimeoutError("რესურსი მზად არ არის განსაზღვრულ დროს" ) # დროის გასვლის შეტყობინება
# check_condition(response, expected_condition):
# ლოგიკა მზადყოფნის პირობის შემოწმებისთვის API-ის პასუხის საფუძველზე
# მაგალითად, return response['status'] == 'ready'
Python-ის მაგალითი requests ბიბლიოთეკის გამოყენებით:
import requests
import time
def wait_for_status(url, expected_status, timeout=60, interval=5):
"""
ელოდება, სანამ ბოლო წერტილი გარკვეულ სტატუსს არ დაბრუნებს.
"""
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} მიღებულია.")
return True
except requests.exceptions.RequestException as e:
print(f"[{time.strftime('%H:%M:%S')}] მოთხოვნის შეცდომა: {e}. განმეორება {interval} წამში.")
time.sleep(interval)
raise TimeoutError(f"სტატუსის მიღება ვერ მოხერხდა {timeout} წამში.")
# გამოყენების მაგალითი
# try:
# wait_for_status("http://api.example.com/status", 200)
# except TimeoutError as e:
# print(e)
შესაბამისი რეალიზაციის არჩევა დამოკიდებულია API-ის სპეციფიკაზე და ტესტირების მოთხოვნებზე. მნიშვნელოვანია უზრუნველყოთ მოქნილობა тайმ-აუტებისა და ინტერვალების კონფიგურაციაში, ასევე ინფორმაციული შეტყობინებები тайმ-აუტის გასვლის შესახებ.