10 промтов для FastAPI: эндпоинты, Pydantic, фоновая обработка

FastAPI — один из самых популярных фреймворков для создания API на Python. Его ключевые возможности: высокая производительность, автоматическая валидация через Pydantic и поддержка асинхронности. В этой статье мы собрали 10 промтов (шаблонных запросов), которые помогут вам быстрее и качественнее разрабатывать эндпоинты, настраивать модели данных и обрабатывать фоновые задачи. Каждый промт сопровождается примером кода и пояснением.

1. Базовый эндпоинт с GET-запросом

Самый простой промт для создания эндпоинта, который возвращает JSON-ответ.

Промт:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

Пример результата:
При обращении к GET / клиент получит {"message": "Hello, World!"}. Этот промт — основа для любого API.

2. Эндпоинт с параметрами пути и query-параметрами

FastAPI позволяет легко извлекать параметры из URL.

Промт:

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

Пример результата:
Запрос GET /items/42?q=test вернёт {"item_id": 42, "q": "test"}. Параметр item_id автоматически преобразуется в int, а q — опциональная строка.

3. POST-эндпоинт с телом запроса через Pydantic

Pydantic — библиотека для валидации данных на основе аннотаций типов. В FastAPI она используется по умолчанию.

Промт:

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = False

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

Пример результата:
Отправка POST на /items/ с JSON {"name": "Laptop", "price": 999.99} вернёт {"item_name": "Laptop", "item_price": 999.99}. Если поле price будет строкой, FastAPI вернёт ошибку валидации.

4. Валидация с использованием Field и констрейнтов

Для более точной валидации используйте Field из Pydantic.

Промт:

from pydantic import Field

class Product(BaseModel):
    name: str = Field(..., min_length=3, max_length=50)
    price: float = Field(..., gt=0, le=10000)

@app.post("/products/")
def create_product(product: Product):
    return product

Пример результата:
При попытке отправить {"name": "AB", "price": -5} вернётся ошибка 422 с описанием: name должен быть длиннее 3 символов, price — больше 0.

5. Асинхронный эндпоинт для длительных операций

Используйте async def для неблокирующих операций, например, обращения к внешнему API.

Промт:

import httpx

@app.get("/external-data")
async def get_external_data():
    async with httpx.AsyncClient() as client:
        response = await client.get("https://api.example.com/data")
        return response.json()

Пример результата:
Эндпоинт асинхронно запрашивает данные с внешнего сервиса и возвращает их. Это повышает пропускную способность сервера при большом количестве запросов.

6. Фоновая задача с BackgroundTasks

FastAPI предоставляет встроенный механизм для выполнения задач после отправки ответа клиенту.

Промт:

from fastapi import BackgroundTasks

def write_log(message: str):
    with open("log.txt", "a") as f:
        f.write(message + "\n")

@app.post("/send-notification")
async def send_notification(email: str, background_tasks: BackgroundTasks):
    background_tasks.add_task(write_log, f"Notification sent to {email}")
    return {"message": "Notification will be sent"}

Пример результата:
Клиент сразу получает ответ, а запись в лог выполняется в фоне. Это идеально для операций, не требующих немедленного подтверждения.

7. Фоновая задача с Celery для сложных процессов

Для более тяжёлых задач (отправка email, обработка изображений) используйте Celery.

Промт (конфигурация):

from celery import Celery

celery_app = Celery("tasks", broker="redis://localhost:6379/0")

@celery_app.task
def send_email_async(to: str, subject: str, body: str):
    # код отправки email
    pass

@app.post("/send-email")
def send_email_endpoint(to: str):
    send_email_async.delay(to, "Welcome", "Hello!")
    return {"status": "queued"}

Пример результата:
Запрос на /send-email ставит задачу в очередь Redis, и Celery worker выполняет её асинхронно.

8. Эндпоинт с зависимостями (Dependency Injection)

FastAPI поддерживает внедрение зависимостей, что упрощает повторное использование кода.

Промт:

from fastapi import Depends

def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
    return commons

Пример результата:
Запрос GET /items/?q=test&skip=10&limit=50 вернёт {"q": "test", "skip": 10, "limit": 50}. Зависимость автоматически извлекает query-параметры.

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

Создайте собственное исключение и обработчик для него.

Промт:

from fastapi import HTTPException

class ItemNotFoundException(Exception):
    pass

@app.exception_handler(ItemNotFoundException)
async def item_not_found_handler(request, exc):
    return JSONResponse(status_code=404, content={"error": "Item not found"})

@app.get("/items/{item_id}")
def get_item(item_id: int):
    if item_id != 1:
        raise ItemNotFoundException()
    return {"item_id": item_id}

Пример результата:
При запросе несуществующего item_id возвращается 404 с кастомным сообщением.

10. Документация и метаданные API

FastAPI автоматически генерирует документацию OpenAPI и Swagger UI.

Промт:

app = FastAPI(title="My API", description="API for managing items", version="1.0.0")

@app.get("/", summary="Root endpoint", tags=["Root"])
async def root():
    return {"message": "Hello"}

Пример результата:
По адресу /docs будет доступен Swagger UI с описанием всех эндпоинтов, включая параметры и модели Pydantic.

Заключение

Мы рассмотрели 10 промтов, которые покрывают базовые и продвинутые возможности FastAPI: от простых GET-запросов до фоновых задач с Celery и кастомных исключений. Используйте эти шаблоны как отправную точку для своих проектов. FastAPI активно развивается, и его документация (fastapi.tiangolo.com) является лучшим источником для углублённого изучения. Экспериментируйте, комбинируйте промты и создавайте надёжные API.

← Все статьи

Комментарии

Читайте также

Как AI-агент сам провел раунд финансирования в $100 млн: кейс стартапа, который доверил всё Vibe Coding

10 июля 2026

Восход кода кошари: как Vibe Coding меняет правила игры в разработке

10 июля 2026

Как автоматизировать LiveChat с помощью AI-агента ASI Biont: руководство по интеграции без кода для более умной поддержки клиентов

10 июля 2026

Как перестать бояться консоли: обзор курса «Linux для начинающих» на Asibiont с AI-тьютором

10 июля 2026

10 промтов для UI/UX дизайна в Figma: от компонентов до прототипов

10 июля 2026

Интеграция датчика дождя и влажности почвы с AI-агентом ASI Biont: автоматизация полива без кода

10 июля 2026

Вайб кодинг на Asibiont: как AI-генерация кода превращает новичков в создателей приложений за 4 недели

10 июля 2026

Mobile Security — безопасность мобильных приложений (iOS и Android): как стать востребованным специалистом в 2026 году

10 июля 2026

Курс «AI-тестировщик (авто-тесты AI)»: как автоматизировать тестирование с помощью нейросетей и ускорить релизы на 40%

10 июля 2026