Перейти к содержанию

Веб-фреймворки

Интеграции с Litestar, FastAPI и Robyn одинаково выполняют запрос в транзакции и добавляют одни и те же маршруты здоровья; у FastAPI и Robyn общие и схемы ответа. Эта страница описывает общее; страница каждого фреймворка — как подключить к нему hare.

Транзакция на каждый запрос: atomic_requests

atomic_requests=True выполняет каждый HTTP-запрос в транзакции на подключении по умолчанию; последовательность псевдонимов подключений открывает транзакцию на каждом из них. Транзакция:

  • фиксируется, когда у ответа статус меньше 500, — до отправки ответа, поэтому на неудачную фиксацию всё ещё отвечают ошибкой; тело потокового ответа (Litestar, FastAPI) отправляется после фиксации;
  • откатывается при ответе со статусом 500 и выше и при исключении, обработанном или нет;
  • как обычно, выполняет после фиксации колбэки Transactions.on_commit().

С несколькими подключениями транзакции фиксируются по очереди; неудачная фиксация одной откатывает ещё не зафиксированные, но не уже зафиксированные. Псевдоним, которого нет в конфигурации, не даёт приложению запуститься. Как и подключение, которое не выполняет транзакций, — подключение ClickHouse без transactions=true: ConfigurationError, как только его база отвечает, вместо ошибки на каждом запросе.

Что выполняется без транзакции:

Фреймворк Без транзакции
Litestar обработчик маршрута с opt={SKIP_TRANSACTION_OPT_KEY: True}; соединение WebSocket
FastAPI маршрут, обработчик которого помечен RequestTransaction.skip; соединение WebSocket
Robyn обработчик, помеченный RequestTransaction.skip; константный маршрут (const=True, в том числе собственные /openapi.json и /docs Robyn) — сервер выполняет его один раз при запуске, до того как открывается контекст hare

Схемы ответа: response_model

Маршрут FastAPI или Robyn возвращает модели hare со своим response_model: для строки или списка (list[BookSchema]) — схемой одной строки с from_attributes=True, а для страницы строк — схемой страницы: PageSchema[BookSchema] (ScrollPageSchema, CursorPageSchema для других видов страниц). Строки страницы лежат в result. Litestar вместо этого возвращает модели через HareDTO — см. Ответы: HareDTO.

Маршруты здоровья: health_routes

health_routes=HealthRoutes(HealthCheck()) добавляет маршрут готовности и маршрут работоспособности:

  • /health/ready — подключения пингуются и оцениваются HealthCheck: 200, degraded_status_code при деградации, 503 при неработоспособности;
  • /health/live — 200, пока процесс отвечает, база не трогается.

Ни один не работает в транзакции запроса и не попадает в схему OpenAPI. Пути, статус при деградации и подробности ответа — аргументы HealthRoutes (см. Метрики пула и здоровье).