Ответ
FastAPI построен на двух основных технологиях, которые обеспечивают его высокую производительность и удобство для разработчика:
-
Starlette — это легковесный ASGI (Asynchronous Server Gateway Interface) фреймворк. FastAPI использует Starlette для всей основной веб-части: маршрутизации (routing), обработки middleware, WebSocket, фоновых задач и т.д. Благодаря ASGI, FastAPI нативно поддерживает асинхронные операции (
async
/await
), что делает его одним из самых быстрых фреймворков для Python. -
Pydantic — это библиотека для валидации данных и управления настройками с использованием аннотаций типов Python. FastAPI использует Pydantic для:
- Валидации данных: Автоматическая проверка типов и форматов входящих данных (тело запроса, query-параметры).
- Сериализации: Преобразование объектов Python в JSON для ответов.
- Автоматической генерации документации: FastAPI анализирует модели Pydantic для создания OpenAPI-схемы, которая отображается в интерактивной документации (Swagger UI и ReDoc).
Для запуска FastAPI-приложения также необходим ASGI-сервер, такой как Uvicorn или Hypercorn.
Пример синергии FastAPI и Pydantic:
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
# 1. Pydantic модель для валидации и сериализации данных
class Item(BaseModel):
name: str = Field(..., min_length=3)
price: float = Field(..., gt=0) # Цена должна быть больше нуля
is_offer: bool | None = None
# 2. FastAPI использует модель для валидации тела запроса
# и автоматической генерации документации OpenAPI
@app.post("/items/")
async def create_item(item: Item):
# Если данные невалидны, FastAPI вернет ошибку 422
return {"item_name": item.name, "item_price": item.price}
Таким образом, FastAPI — это, по сути, связующее звено, которое объединяет мощь асинхронного веба от Starlette с надежной валидацией данных и автодокументацией от Pydantic.