Что такое API-композиция в микросервисной архитектуре

Ответ

API-композиция (API Composition) — это паттерн, при котором создается специальный сервис-композитор (или используется API Gateway) для объединения данных из нескольких микросервисов в один ответ. Этот паттерн решает проблему "chatty client", когда клиенту приходится делать множество отдельных запросов для отображения одной страницы или выполнения одной операции.

Основная идея: Клиент делает один высокоуровневый запрос, а сервис-композитор выполняет всю "оркестровку" — параллельно или последовательно вызывает нужные микросервисы, обрабатывает их ответы и формирует единый результат.

Пример: Композиция данных о пользователе и его заказах

Представим, что нам нужно получить профиль пользователя и список его последних заказов. Это данные из двух разных микросервисов: users-service и orders-service.

import asyncio
from fastapi import FastAPI
import httpx

app = FastAPI(title="API Composer")

# Адреса внутренних сервисов
USERS_SERVICE = "http://users-service/users"
ORDERS_SERVICE = "http://orders-service/orders"

@app.get("/composite/user-profile/{user_id}")
async def get_user_profile(user_id: int):
    async with httpx.AsyncClient() as client:
        # Параллельно запрашиваем данные из двух сервисов
        user_req = client.get(f"{USERS_SERVICE}/{user_id}")
        orders_req = client.get(f"{ORDERS_SERVICE}?user_id={user_id}")

        user_res, orders_res = await asyncio.gather(
            user_req,
            orders_req
        )

        user_res.raise_for_status()
        orders_res.raise_for_status()

        # Собираем единый ответ
        return {
            "profile": user_res.json(),
            "recent_orders": orders_res.json()
        }

Преимущества:

  • Упрощение клиента: Клиентскому приложению не нужно знать о внутренней структуре микросервисов.
  • Снижение сетевой нагрузки: Один запрос от клиента вместо множества.
  • Оптимизация: Композитор может выполнять запросы к внутренним сервисам параллельно, ускоряя получение ответа.

Недостатки:

  • Дополнительная точка отказа: Если сервис-композитор падает, вся связанная с ним функциональность становится недоступной.
  • Риск усложнения: Композитор может превратиться в "монолитный шлюз", который сложно поддерживать.