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

Введение

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

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

Для чего: Быстро создать простой эндпоинт, который возвращает данные.

Промт:

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id, "name": f"Item {item_id}"}

Пример использования:
Запрос GET /items/42 вернёт {"item_id": 42, "name": "Item 42"}. Важно: FastAPI автоматически проверяет, что item_id — целое число, иначе вернёт ошибку 422.

2. Эндпоинт с POST и Pydantic-моделью

Для чего: Валидировать входящие JSON-данные с помощью Pydantic.

Промт:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

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/ с телом {"name": "Laptop", "price": 999.99} вернёт {"item_name": "Laptop", "item_price": 999.99}. Если пропустить обязательное поле name, FastAPI вернёт 422 с описанием ошибки.

3. Асинхронный эндпоинт с await

Для чего: Выполнять I/O-bound операции (запросы к БД, внешним API) без блокировки.

Промт:

from fastapi import FastAPI
import httpx

app = FastAPI()

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

Пример использования:
При запросе GET /async-data сервер не блокирует другие запросы во время ожидания ответа от внешнего API. Это критично для высоконагруженных приложений.

4. Эндпоинт с параметрами запроса (query parameters)

Для чего: Передавать фильтры, пагинацию и другие опциональные параметры.

Промт:

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
def list_items(skip: int = 0, limit: int = 10):
    fake_items = [{"id": i} for i in range(100)]
    return fake_items[skip:skip + limit]

Пример использования:
Запрос GET /items/?skip=20&limit=5 вернёт элементы с 20 по 24. Параметры со значениями по умолчанию опциональны.

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

Для чего: Запускать длительные операции (отправка email, обработка файлов) после ответа клиенту.

Промт:

from fastapi import FastAPI, BackgroundTasks

app = FastAPI()

def write_log(message: str):
    with open("log.txt", "a") as f:
        f.write(f"{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 queued"}

Пример использования:
Клиент получает мгновенный ответ, а запись в лог выполняется асинхронно. Важно: BackgroundTasks подходит для лёгких задач; для тяжёлых используйте Celery или RQ.

6. Валидация строк с помощью Pydantic

Для чего: Проверять формат email, URL, длину строки.

Промт:

from pydantic import BaseModel, EmailStr, Field

class User(BaseModel):
    username: str = Field(..., min_length=3, max_length=20)
    email: EmailStr

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

Пример использования:
Запрос с username: "A" вернёт ошибку, так как длина меньше 3. EmailStr требует установки pydantic[email].

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

Для чего: Повторно использовать логику (проверка токена, подключение к БД).

Промт:

from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

def verify_token(token: str):
    if token != "secret":
        raise HTTPException(status_code=401, detail="Invalid token")
    return token

@app.get("/protected")
def protected_route(token: str = Depends(verify_token)):
    return {"message": "Access granted", "token": token}

Пример использования:
Запрос GET /protected?token=secret вернёт успех; иначе — 401. Зависимости можно вкладывать и переиспользовать.

8. Обработка ошибок с кастомным HTTPException

Для чего: Возвращать понятные сообщения об ошибках.

Промт:

from fastapi import FastAPI, HTTPException

app = FastAPI()

items = {1: "Laptop", 2: "Phone"}

@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item": items[item_id]}

Пример использования:
Запрос GET /items/3 вернёт 404 с JSON {"detail": "Item not found"}.

9. Эндпоинт с загрузкой файла

Для чего: Принимать файлы от клиента (изображения, документы).

Промт:

from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):
    content = await file.read()
    return {"filename": file.filename, "size": len(content)}

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

10. Фоновая задача с Celery (расширенный вариант)

Для чего: Выполнять тяжёлые задачи (генерация отчётов, отправка писем) в отдельном воркере.

Промт:

from celery import Celery
from fastapi import FastAPI

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

@celery_app.task
def send_email_task(email: str):
    # Имитация отправки
    return f"Email sent to {email}"

app = FastAPI()

@app.post("/send-email")
def send_email(email: str):
    task = send_email_task.delay(email)
    return {"task_id": task.id, "status": "queued"}

Пример использования:
Запрос возвращает ID задачи, а фактическая отправка выполняется в фоне. Celery требует запущенного Redis и воркера.

Заключение

Эти 10 промтов покрывают 90% повседневных задач в FastAPI: от простых GET-эндпоинтов до фоновой обработки с Celery. Используйте их как стартовую точку — адаптируйте под свои проекты, добавляйте логирование и тесты. FastAPI продолжает активно развиваться, и его экосистема (Pydantic v2, Starlette) делает разработку безопасной и быстрой. Если вам нужно интегрировать FastAPI с внешними сервисами (например, Telegram, Stripe, любые REST API), ASI Biont поддерживает подключение к ним через готовые коннекторы — подробнее на asibiont.com/courses. Начните с малого — и вы увидите, как промты экономят часы кодинга.

← Все статьи

Комментарии

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

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

14 июля 2026

Telegram Bot Development: как автоматизировать бизнес и заработать на ботах в 2026 году

14 июля 2026

AI-агент оживляет завод: интеграция Modbus RTU (RS-485) с ASI Biont для предиктивного обслуживания

14 июля 2026

Uber не хочет быть «всем для всех»: что на самом деле сказал продакт-директор про отели, роботакси и будущее платформы

14 июля 2026

Курс «Промышленный интернет вещей (IIoT) и системы SCADA»: ваш путь к Индустрии 4.0 в 2026 году

14 июля 2026

ИИ незаметно меняет мнения пользователей в соцсетях: как алгоритмы формируют нашу реальность

14 июля 2026

CKA + CKAD — Kubernetes Administrator & Developer: как подготовиться к сертификации в 2026 году с AI-тьютором

14 июля 2026

Как перестать терять сделки из-за языка: обзор курса «Английский для бизнеса» на asibiont.com

14 июля 2026

Трансформационное лидерство и стратегическое мышление CEO: Программа для основателей на уровне Гарварда, желающих овладеть принятием решений

14 июля 2026