Веб-фреймворки¶
Интеграции с 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 (см. Метрики пула и
здоровье).