Sobes.tech
Junior — Senior
34

Асинхронная обработка списка заказов и связанных данных о пользователях

Условие задачи

Необходимо написать функцию, которая получает массив заказов и для каждого из них выполняет цепочку запросов:

  1. По order_id отправляет запрос к orders_service_url и получает идентификатор user_id.
  2. С полученным user_id одновременно делает два запроса:
    • к user_service_url — сервис возвращает JSON‑объект с информацией о пользователе;
    • к af_service_url — сервис возвращает JSON‑объект с данными о доставке.
  3. После получения ответов от обоих сервисов передаёт их в функцию process_users_and_shipments(user: dict, af_info: dict) -> Any для дальнейшей бизнес‑логики.
from typing import Any

# Сначала в order_service смотрим, какой заказ делал какой пользователь
orders_service_url = "http://some-domain.ru/api/v1/user-orders"

# С этими пользователями идем в:
user_service_url = "http://some-domain.ru/api/v1/user"
af_service_url = "http://some-domain.ru/api/v1/af"

# 10 миллионов запросов
# В качестве результата на order service будет возвращен id пользователя user_id
order_requests = [
    {"order_id": 25},
    {"order_id": 26},
    {"order_id": 34},
    # ...
]

def process_users_and_shipments(user: dict, af_info: dict) -> Any:
    # some business logic
    ...

Функция должна быть реализована с использованием асинхронных средств (например, asyncio и aiohttp) для того, чтобы эффективно обрабатывать большое количество запросов без блокировки.