Перейти к основному содержимому

FastAPI

Разработчику Архитектору

FastAPI

FastAPI — фреймворк для построения HTTP API на Python 3.8+. Он построен поверх Starlette (ASGI) и Pydantic (валидация данных). Типичные сценарии: REST/JSON-сервисы, микросервисы, бэкенд для SPA и мобильных клиентов.

Пошаговый старт: Первая программа на FastAPI. Сравнение Flask/Django/FastAPI: Создание собственного API на Python, Фреймворки и библиотеки Python.


Чем FastAPI отличается от Flask и Django

КритерийFlaskDjangoFastAPI
ФокусВеб + API (гибко)Полноценные сайтыAPI в первую очередь
ВалидацияВручную / расширенияForms / DRFАннотации типов + Pydantic
Документация APIВручную / Swagger-плагиныDRF + drf-spectacularSwagger UI и ReDoc из коробки
AsyncЧерез Quart / 2.xDjango 4.1+ async viewsНативно (ASGI)
АдминкаНетВстроеннаяНет

FastAPI не заменяет Django там, где нужны админка, шаблоны и «батарейки» для CMS. Он выигрывает там, где контракт API и скорость разработки важнее готовой CMS.


Архитектура запроса

  1. ASGI-сервер (uvicorn, hypercorn) принимает соединение.
  2. FastAPI сопоставляет путь с обработчиком.
  3. Pydantic проверяет query, path, body по типам Python.
  4. Ответ сериализуется в JSON; схема попадает в OpenAPI.

Ключевые концепции

Приложение и маршруты

from fastapi import FastAPI

app = FastAPI(title="Demo API")


@app.get("/health")
def health():
return {"status": "ok"}

Модели Pydantic

from pydantic import BaseModel, Field


class ItemCreate(BaseModel):
title: str = Field(min_length=1, max_length=200)
done: bool = False

Ошибки валидации возвращаются как 422 Unprocessable Entity с понятным JSON — удобно для фронтенда.

Зависимости (Depends)

Общая логика (БД-сессия, текущий пользователь, пагинация) выносится в функции-зависимости и подключается к эндпоинтам без наследования «бог-классов».

Документация

После запуска доступны:

  • /docs — Swagger UI;
  • /redoc — ReDoc;
  • /openapi.json — машиночитаемая схема.

Экосистема

КомпонентНазначение
uvicornASGI-сервер для разработки и production
SQLAlchemy 2 + asyncORM
AlembicМиграции
HTTPXТесты и исходящие запросы
pytestТестирование через TestClient

Подробнее об инструментах: Экосистема Python-приложений.


Когда выбирать FastAPI

  • Нужен чистый JSON API с автодокументацией.
  • Команда уже использует type hints и хочет ловить ошибки до runtime.
  • Важны WebSocket и async I/O (много параллельных запросов к БД и внешним сервисам).
  • Планируется связка с React / Vue / мобильным клиентом.

Для учебного сайта с HTML-формами и админкой чаще проще Django или Flask.


Связанные материалы


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).