Как работает FastAPI и как поднять простое REST API на Python

9 минут чтения
Средний рейтинг статьи — 4.7

FastAPI — это современный фреймворк для создания API на Python, разработанный с упором на высокую производительность, простоту разработки и автоматическую генерацию документации. Он использует асинхронную модель (async/await), поддерживает аннотации типов, и по скорости работы находится рядом с Node.js и Go благодаря базе на Uvicorn + Starlette.

FastAPI стал стандартом для Python-бэкендов, микросервисов, внутренних инструментов, телеграм-ботов и интеграций, где нужны быстрые и лёгкие HTTP-сервисы.

Почему FastAPI стал таким популярным

FastAPI решает боли, которыми страдали предыдущие Python-фреймворки:

  • ручное описание схем данных
  • нет встроенной документации
  • сложные зависимости
  • слабая работа с асинхронностью

А в FastAPI это есть «из коробки»:

  • автоматическая Swagger-документация
  • строгие модели данных на Pydantic
  • асинхронный обработчик запросов
  • автоматическая валидация входящих данных
  • высокая производительность благодаря Starlette
  • полностью типизированный код

И главное — код получается компактным и читаемым.

Установка FastAPI

Для работы понадобится:

pip install fastapi uvicorn

uvicorn — это ASGI-сервер, который запускает приложение.

Самый простой сервер на FastAPI

Создадим main.py:

from fastapi import FastAPI
 
app = FastAPI()
 
@app.get("/")
def root():
    return {"message": "Hello, FastAPI!"}

Запуск:

uvicorn main:app --reload

После запуска API доступно по адресу:

http://127.0.0.1:8000/

Автоматическая Swagger-документация

Без единой строчки конфигурации FastAPI создаёт:

  • Swagger UI:
    http://127.0.0.1:8000/docs
  • ReDoc:
    http://127.0.0.1:8000/redoc

Это удобно для тестирования API и передачи документации коллегам.

Маршруты и HTTP-методы

FastAPI поддерживает все основные методы:

@app.get("/users")
def get_users():
    return ["alex", "maxim"]
 
@app.post("/users")
def create_user(user: dict):
    return {"status": "created", "user": user}
 
@app.put("/users/{user_id}")
def update_user(user_id: int, data: dict):
    return {"id": user_id, "update": data}
 
@app.delete("/users/{user_id}")
def delete_user(user_id: int):
    return {"status": "deleted", "id": user_id}

Модели данных через Pydantic

Pydantic — это строгие модели данных, которые гарантируют правильный формат входящих параметров.

Пример — создание пользователя:

from pydantic import BaseModel
 
class User(BaseModel):
    name: str
    age: int
    email: str

Используем модель в POST-маршруте:

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

Если отправить неправильные данные (например, возраст строкой), FastAPI автоматически вернёт JSON-ошибку.

Асинхронные обработчики

FastAPI создан на основе Starlette, поэтому полностью поддерживает async:

@app.get("/slow")
async def slow_handler():
    await asyncio.sleep(2)
    return {"status": "done"}

Если запустить несколько таких запросов, FastAPI обработает их параллельно, не блокируя поток.

Передача параметров в запросе

Путь

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

Query-параметры

/search?limit=10&query=test
@app.get("/search")
def search(limit: int = 10, query: str = None):
    return {"limit": limit, "query": query}

Подключение к базе данных

FastAPI не навязывает ORM.
Можно использовать:

  • SQLAlchemy
  • Tortoise ORM
  • Prisma Client Python
  • asyncpg

Пример подключения через SQLAlchemy:

from sqlalchemy import create_engine
engine = create_engine("postgresql://user:pass@localhost/db")

FastAPI хорош тем, что легко комбинируется с любыми инструментами.

Dependency Injection в FastAPI

FastAPI предлагает механизм зависимостей — удобный способ передавать общие объекты (БД, конфиги, сервисы).

from fastapi import Depends
 
def get_token():
    return "secret-token"
 
@app.get("/protected")
def protected(token: str = Depends(get_token)):
    return {"token": token}

Это похоже на DI (Dependency Injection) в NestJS и других современных фреймворках.

Middleware

FastAPI поддерживает middleware — функции, которые выполняются до и после обработки запроса.

from fastapi import Request
 
@app.middleware("http")
async def add_header(request: Request, call_next):
    response = await call_next(request)
    response.headers["X-App"] = "FastAPI"
    return response

Как развернуть FastAPI

Обычно используют:

  1. Uvicorn + Gunicorn (uvicorn workers)
  2. Docker
  3. Nginx как reverse proxy

Пример Dockerfile:

FROM python:3.12
 
WORKDIR /app
COPY . .
 
RUN pip install fastapi uvicorn
 
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Итоги

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

9 минут чтения
Средний рейтинг статьи — 4.7

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний