Валидация входных данных в FastAPI

Развёртывание ИИ в производственной среде с помощью FastAPI

Matt Eckerle

Software and Data Engineering Leader

Валидация входных данных

Схема ML-предсказания с FastAPI

Развёртывание ИИ в производственной среде с помощью FastAPI

Зачем валидировать входные данные?

 

  • Обеспечивает целостность данных
  • Предотвращает ошибки в приложении
  • Интегрируется с Pydantic
  • Предоставляет мощные инструменты валидации

 

Логотип Pydantic

Развёртывание ИИ в производственной среде с помощью FastAPI

Pydantic для встроенных валидаторов

Валидация полей с помощью Pydantic

Развёртывание ИИ в производственной среде с помощью FastAPI

Пользовательская валидация с Pydantic

Пользовательская валидация с помощью Pydantic

Развёртывание ИИ в производственной среде с помощью FastAPI

Корректная обработка ошибок

Сообщения об ошибках при валидации

Развёртывание ИИ в производственной среде с помощью FastAPI

Валидаторы полей Pydantic

  • Эндпоинт регистрации пользователя

  • Валидация имени пользователя:

from pydantic import BaseModel, Field
class User(BaseModel):
    username: str = Field(..., min_length=3, max_length=50)
Развёртывание ИИ в производственной среде с помощью FastAPI

Добавление пользовательских валидаторов

class User(BaseModel):
    username: str = Field(..., 
                          min_length=3, 
                          max_length=50)
    age: int

@field_validator('age') def age_criteria(cls, age): if age < 13: raise ValueError('User must be at least 13') return age
Развёртывание ИИ в производственной среде с помощью FastAPI

Пользовательские валидаторы в действии

Корректный запрос:

{"username": "john_doe", "age": 25}
Valid user: username='john_doe' age=25

Некорректный запрос:

{"username": "too_young", "age": 10}
Validation error for {'username': 'too_young', 'age': 10}: User must be at least 13
Развёртывание ИИ в производственной среде с помощью FastAPI

Всё вместе

Сообщения об ошибках при валидации

  • Валидатор поля для имени пользователя
  • Пользовательский валидатор для возраста
  • Сообщение об ошибке при неудачной валидации
Развёртывание ИИ в производственной среде с помощью FastAPI

Всё вместе

@app.post("/users")
def create_user(user: User):
    return {"message": "User created",
            "user": user.model_dump()}

Вывод:

{
  "message": "User created successfully",
    "user": {
          "username": "john_doe", 
           "age": 25
    }
}
Развёртывание ИИ в производственной среде с помощью FastAPI

Давайте потренируемся!

Развёртывание ИИ в производственной среде с помощью FastAPI

Preparing Video For Download...