Введение
FastAPI — один из самых быстрорастущих веб-фреймворков для Python. Его популярность объясняется скоростью работы, автоматической генерацией документации (OpenAPI/Swagger) и строгой типизацией через Pydantic. К середине 2026 года FastAPI используется в стартапах, крупных корпорациях и open-source проектах — от микросервисов до AI-платформ. Однако даже опытные разработчики часто упускают возможности фреймворка: не используют фоновые задачи, забывают про кастомные валидаторы или пишут неэффективные эндпоинты. В этой статье я собрал 10 промтов для FastAPI — от базовых до экспертных — с примерами кода и пояснениями. Каждый промт решает конкретную задачу, с которой я сталкивался в реальных проектах.
1. Базовый эндпоинт с GET-запросом
Задача: Создать простой эндпоинт, который принимает параметры пути и query-параметры, возвращает JSON.
Промт: «Напиши FastAPI эндпоинт GET /items/{item_id}, который принимает item_id (int) и необязательный query-параметр q (str). Возвращай словарь с item_id и q.»
Пример результата:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
Комментарий: FastAPI автоматически валидирует тип item_id — если передать строку, вернёт 422 ошибку. Query-параметр q опционален.
2. POST-эндпоинт с Pydantic моделью
Задача: Создать POST-эндпоинт, который принимает JSON-тело, валидированное через Pydantic.
Промт: «Создай Pydantic модель Item с полями name (str), price (float), is_offer (bool, по умолчанию False). Напиши POST /items, который принимает Item и возвращает его с id.»
Пример результата:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = False
@app.post("/items")
async def create_item(item: Item):
return {"id": 1, **item.model_dump()}
Комментарий: Pydantic v2 использует model_dump() вместо dict(). Встроенная валидация проверяет типы и обязательность полей.
3. Кастомная валидация Pydantic
Задача: Добавить кастомный валидатор для поля email в Pydantic модели.
Промт: «Создай Pydantic модель User с полями username (str) и email (str). Добавь валидатор, который проверяет, что email содержит '@' и '.' после '@'. Если нет — вызывай ValueError.»
Пример результата:
from pydantic import BaseModel, field_validator
class User(BaseModel):
username: str
email: str
@field_validator("email")
@classmethod
def validate_email(cls, v):
if "@" not in v or "." not in v.split("@")[1]:
raise ValueError("Invalid email format")
return v
Комментарий: field_validator — мощный инструмент. Можно проверять базы данных, форматы или бизнес-логику. Pydantic v2 рекомендует использовать @classmethod.
4. Фоновая задача (BackgroundTasks)
Задача: Выполнить длительную операцию (например, отправку email) после ответа клиенту.
Промт: «Используй BackgroundTasks из FastAPI. Создай эндпоинт POST /send-email, который принимает email и тему, а затем асинхронно вызывает функцию send_email (которая просто печатает в консоль). Верни ответ сразу.»
Пример результата:
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def send_email(email: str, subject: str):
# Имитация отправки
print(f"Sending email to {email}: {subject}")
@app.post("/send-email")
async def send_email_endpoint(email: str, subject: str, background_tasks: BackgroundTasks):
background_tasks.add_task(send_email, email, subject)
return {"message": "Email will be sent"}
Комментарий: BackgroundTasks выполняются в том же процессе, но после ответа. Для тяжёлых задач используйте Celery или Redis Queue. ASI Biont поддерживает подключение к очередям через API — подробнее на asibiont.com/courses.
5. Асинхронные эндпоинты с httpx
Задача: Сделать асинхронный HTTP-запрос к внешнему API внутри эндпоинта.
Промт: «Напиши GET /fetch-data, который делает асинхронный GET-запрос к https://jsonplaceholder.typicode.com/posts/1 через httpx и возвращает полученные данные.»
Пример результата:
import httpx
from fastapi import FastAPI
app = FastAPI()
@app.get("/fetch-data")
async def fetch_data():
async with httpx.AsyncClient() as client:
response = await client.get("https://jsonplaceholder.typicode.com/posts/1")
return response.json()
Комментарий: Использование async/await не блокирует event loop. httpx поддерживает HTTP/2 и таймауты.
6. Dependency Injection для авторизации
Задача: Создать зависимость для проверки API-ключа.
Промт: «Напиши зависимость verify_token, которая получает заголовок Authorization из запроса. Если токен равен 'secret123' — пропускает, иначе вызывает HTTPException с 401.»
Пример результата:
from fastapi import FastAPI, Header, HTTPException, Depends
app = FastAPI()
def verify_token(authorization: str = Header(...)):
if authorization != "Bearer secret123":
raise HTTPException(status_code=401, detail="Invalid token")
return authorization
@app.get("/protected")
async def protected_route(token: str = Depends(verify_token)):
return {"message": "Access granted"}
Комментарий: Depends делает код модульным. Можно создавать цепочки зависимостей.
7. Pydantic с вложенными моделями
Задача: Создать модель с вложенными объектами и списками.
Промт: «Создай Pydantic модели: Address (city, street), User (name, address: Address, tags: list[str]). Напиши POST /users, который принимает User и возвращает его.»
Пример результата:
from pydantic import BaseModel
from typing import List
class Address(BaseModel):
city: str
street: str
class User(BaseModel):
name: str
address: Address
tags: List[str]
@app.post("/users")
async def create_user(user: User):
return user.model_dump()
Комментарий: Вложенные модели автоматически валидируются. Можно задавать глубокую вложенность.
8. Обработка ошибок с кастомными исключениями
Задача: Создать кастомное исключение и глобальный обработчик.
Промт: «Определи класс CustomException с полями message (str) и status_code (int). Добавь обработчик исключений, который возвращает JSON с message и кодом.»
Пример результата:
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
app = FastAPI()
class CustomException(Exception):
def __init__(self, message: str, status_code: int):
self.message = message
self.status_code = status_code
@app.exception_handler(CustomException)
async def custom_handler(request: Request, exc: CustomException):
return JSONResponse(status_code=exc.status_code, content={"error": exc.message})
@app.get("/custom-error")
async def trigger_error():
raise CustomException(message="Something went wrong", status_code=418)
Комментарий: Глобальные обработчики улучшают читаемость кода и клиентский опыт.
9. Фоновая обработка с Celery
Задача: Интегрировать Celery для выполнения тяжёлых задач.
Промт: «Настрой Celery с Redis как брокером. Создай задачу process_data, которая принимает int и возвращает квадрат. Эндпоинт POST /process запускает задачу и возвращает task_id.»
Пример результата:
# tasks.py
from celery import Celery
celery_app = Celery("tasks", broker="redis://localhost:6379/0")
@celery_app.task
def process_data(x: int):
return x ** 2
# main.py
from fastapi import FastAPI
from tasks import process_data
app = FastAPI()
@app.post("/process")
async def process(x: int):
task = process_data.delay(x)
return {"task_id": task.id}
Комментарий: Celery запускается отдельно. Для продакшена используйте Flower для мониторинга.
10. WebSocket эндпоинт
Задача: Создать WebSocket для реального времени.
Промт: «Напиши WebSocket эндпоинт /ws, который принимает сообщение и отправляет его обратно в верхнем регистре.»
Пример результата:
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(data.upper())
Комментарий: WebSocket полезен для чатов, уведомлений и стриминга данных.
Заключение
FastAPI — это не просто быстрый фреймворк, а экосистема с мощными инструментами для валидации, асинхронности и фоновой обработки. Представленные 10 промтов покрывают 80% типовых задач: от простых REST API до сложных систем с очередями и WebSocket. Главное — не бояться экспериментировать с Pydantic и async/await. Документация FastAPI на июль 2026 года остаётся одной из лучших в мире Python — рекомендую держать её под рукой. А если хотите углубиться в практику, взгляните на курсы ASI Biont, где разбираются реальные кейсы с FastAPI и интеграциями.
Комментарии