Ответ
FastAPI использует Pydantic для решения трех ключевых задач при разработке API: валидации данных, их (де)сериализации и автоматического создания документации.
-
Валидация данных: Pydantic обеспечивает строгую проверку типов для входящих и исходящих данных. Если клиент отправляет данные, не соответствующие модели (например, строку вместо числа), FastAPI автоматически вернет ошибку 422 с подробным описанием.
-
Сериализация и десериализация: Он автоматически преобразует входящий JSON в объекты Python (десериализация) и, наоборот, объекты Python в исходящий JSON (сериализация).
-
Автоматическая документация: FastAPI использует Pydantic-модели для генерации JSON Schema, которая встраивается в интерактивную документацию OpenAPI (Swagger UI) и ReDoc.
Пример:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# Pydantic-модель для валидации входящих данных
class Item(BaseModel):
name: str
price: float
is_offer: bool | None = None
@app.post("/items/")
async def create_item(item: Item):
return item
В этом примере Pydantic автоматически:
- Проверит, что
name— это строка, аprice— число. - Преобразует тело входящего POST-запроса в экземпляр класса
Item. - Сгенерирует схему для документации, где будут указаны типы и обязательность полей.
Ответ 18+ 🔞
Слушай, а знаешь, в чём главная магия FastAPI? Всё держится на этой библиотеке — Pydantic, блядь. Она тут как трёхголовый дракон, только вместо огня плюётся валидацией, сериализацией и документацией. Ну, в рот меня чих-пых, сейчас объясню.
Первое — валидация данных. Это когда какой-нибудь распиздяй присылает тебе вместо числа строку, а ты ему — «нет, мудила, так не пойдёт». Pydantic ловит это нахуй и кидает ошибку 422 с подробным разбором полётов, чтобы клиент понял, где он накосячил.
Второе — сериализация и десериализация. Это когда входящий JSON автоматом превращается в питонячий объект, а твой ответ обратно — в JSON. Всё само, блядь, как по маслу. Никаких ручных json.loads() и прочей хуйни.
Третье — автодокументация. FastAPI смотрит на твои Pydantic-модели и такой: «О, ёпта, я теперь знаю, как с тобой общаться!» — и генерирует схемы для Swagger UI и ReDoc. Получается такая интерактивная шпаргалка, где можно всё потрогать.
Вот смотри, как это выглядит в коде, сука:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# Это наша Pydantic-модель, она как строгий охранник на входе
class Item(BaseModel):
name: str
price: float
is_offer: bool | None = None # Это поле может быть пустым, похуй
@app.post("/items/")
async def create_item(item: Item):
return item
Что здесь происходит, блядь? Pydantic берёт тело POST-запроса, проверяет, что name — строка, а price — число, и если всё ок — создаёт объект Item. Если нет — сразу в сраку ошибку. И всё это, сука, автоматически попадает в документацию! Тебе даже думать не надо, просто работай.