← Назад к вопросам

Какие навыки работы с FastAPI?

1.6 Junior🔥 91 комментариев
#MLOps и инфраструктура#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Навыки работы с FastAPI

FastAPI — это современный веб-фреймворк на Python для создания REST API. Благодаря встроенной валидации, асинхронности и автоматической генерации документации, он стал популярным выбором для production-систем.

Основы FastAPI

Создание приложения и эндпоинтов — минимальный пример:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.get("/items/{item_id}")
async def get_item(item_id: int):
    return {"item_id": item_id}

@app.post("/items/")
async def create_item(item: Item):
    return {"name": item.name, "price": item.price}

Типизация параметров — FastAPI использует type hints для валидации. Параметры могут быть:

  • Path параметры: @app.get("/items/{item_id}")
  • Query параметры: @app.get("/items/?skip=0&limit=10")
  • Body параметры: через Pydantic модели
from fastapi import Query, Path, Body

@app.get("/items/")
async def get_items(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

@app.get("/items/{item_id}")
async def get_item(
    item_id: int = Path(..., gt=0),  # gt = greater than
    q: str = Query(None, max_length=50)
):
    return {"item_id": item_id, "q": q}

Асинхронность и производительность

Async/await синтаксис — FastAPI поддерживает асинхронные функции обработчиков:

import asyncio
from fastapi import FastAPI

app = FastAPI()

@app.get("/users/")
async def get_users():
    # Может быть асинхронный DB запрос
    await asyncio.sleep(1)
    return [{"id": 1, "name": "John"}]

@app.get("/sync-endpoint/")
def sync_endpoint():
    # Синхронные операции тоже работают
    return {"status": "ok"}

Dependency Injection — встроенная система зависимостей для переиспользования логики:

from fastapi import Depends

async def get_query(q: str = None):
    return q

@app.get("/items/")
async def read_items(q: str = Depends(get_query)):
    return {"q": q}

Валидация данных с Pydantic

BaseModel для структурирования данных:

from pydantic import BaseModel, Field, validator
from typing import Optional

class User(BaseModel):
    id: int
    name: str = Field(..., min_length=1, max_length=100)
    email: str
    age: Optional[int] = None

    @validator('email')
    def email_must_be_valid(cls, v):
        if '@' not in v:
            raise ValueError('Invalid email')
        return v

@app.post("/users/")
async def create_user(user: User):
    return user

Обработка ошибок и исключения

HTTP исключения и кастомные коды ответов:

from fastapi import HTTPException, status

@app.get("/items/{item_id}")
async def get_item(item_id: int):
    if item_id < 1:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="Item ID must be positive"
        )
    return {"item_id": item_id}

@app.exception_handler(ValueError)
async def value_error_handler(request, exc):
    return JSONResponse(
        status_code=400,
        content={"detail": str(exc)}
    )

Продвинутые возможности

CORS (Cross-Origin Resource Sharing) — для работы с фронтенд-приложениями:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Или конкретные домены
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

Middleware для логирования и обработки:

from fastapi.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware

class LoggingMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        response = await call_next(request)
        return response

app.add_middleware(LoggingMiddleware)

Автоматическая документация — FastAPI автоматически создаёт Swagger UI и ReDoc на /docs и /redoc.

Развёртывание

ASGI сервер — FastAPI работает на ASGI сервере (например, Uvicorn):

uvicorn main:app --reload  # Development
uvicorn main:app --host 0.0.0.0 --port 8000  # Production

Практические советы

  • Используйте асинхронность для I/O-bound операций (DB, API запросы)
  • Группируйте эндпоинты в APIRouter для лучшей организации
  • Используйте background tasks для долгих операций
  • Всегда валидируйте входные данные через Pydantic
  • Документируйте API примерами в Pydantic моделях

FastAPI идеален для создания быстрых, надёжных и легко масштабируемых API, особенно в контексте микросервисов и ML моделей.