Sobes.tech
Middle

როგორ განვახორციელოთ ელოდოს (Waiter) ნიმუში API-სთვის?

sobes.tech AI

პასუხი AI-სგან

API-ის მოლოდინის ნიმუში (Waiter) განხორციელება მოიცავს რესურსის ან ოპერაციის მდგომარეობის ციკლურ შემოწმებას მანამ, სანამ არ მიაღწევთ ელოდებოდით პირობას ან მითითებულ დროის გასვლის.

ძირითადი ნაბიჯები:

  1. შემოწმებული პირობების განსაზღვრა: მკაფიოდ გაიგეთ, რა მდგომარეობა ითვლება "მზად" (მაგალითად, მოთხოვნის სტატუსის ცვლილება, ახალი ჩანაწერის გამოჩენა, ელოდებოდით მონაცემების დაბრუნება).
  2. შემოწმების მექანიზმის არჩევა: განსაზღვრეთ, როგორ განხორციელდება მდგომარეობის შემოწმება. ეს შეიძლება იყოს იგივე ბოლო წერტილზე განმეორებითი მოთხოვნა, სპეციალურ სტატუსის ბოლო წერტილზე მოთხოვნა ან პასუხის შიგთავსის შემოწმება.
  3. მოლოდინის პარამეტრების დაყენება: განსაზღვრეთ მაქსიმალური მოლოდინის დრო (тайმ-აუტი) და ინტერვალი შემოწმებებს შორის.
  4. ციკლის განხორციელება: შექმენით ციკლი, რომელიც შეასრულებს მდგომარეობის შემოწმებას მითითებულ ინტერვალზე.
  5. გამოსვლის პირობების დამუშავება:
    • ელოდებოდით პირობას მიაღწიეთ, გამოდიხართ.
    • დროის გასვლის შემდეგ, გამოდიხართ გამონაკლისით ან შეცდომით.
  6. შეცდომების დამუშავება შემოწმების დროს: წინასწარ განსაზღვრეთ შესაძლო შეცდომების დამუშავება ციკლში (მაგალითად, 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-ის სპეციფიკაზე და ტესტირების მოთხოვნებზე. მნიშვნელოვანია უზრუნველყოთ მოქნილობა тайმ-აუტებისა და ინტერვალების კონფიგურაციაში, ასევე ინფორმაციული შეტყობინებები тайმ-აუტის გასვლის შესახებ.