Создаём свой первый API на FastAPI за 5 минут: полный гид для начинающих

Создаём свой первый API на FastAPI за 5 минут: полный гид для начинающих

FastAPI — это современный, быстрый веб-фреймворк для создания API на Python, который завоевал огромную популярность благодаря своей простоте, скорости и автоматической генерации документации. Если вы думаете, что создание API — это сложно и долго, этот материал перевернёт ваше представление. Мы создадим работающий API с валидацией данных, документацией и тестовыми эндпоинтами буквально за пять минут.

Почему именно FastAPI?

Прежде чем перейти к практике, давайте разберёмся, почему этот фреймворк стал таким популярным среди разработчиков:

  • Высокая производительность — сравнима с Node.js и Go благодаря использованию Starlette и Pydantic
  • Автоматическая интерактивная документация (Swagger UI и ReDoc)
  • Встроенная валидация данных через Pydantic
  • Асинхронная поддержка «из коробки»
  • Простота изучения и минималистичный синтаксис

FastAPI официально рекомендован Microsoft Azure, Uber, Netflix и другими технологическими гигантами для создания production-готовых API.

Шаг 1: Установка и настройка

Начнём с самого начала. Откройте терминал и выполните несколько команд:

Создание виртуального окружения

  1. python -m venv venv — создаём виртуальное окружение
  2. source venv/bin/activate (Linux/Mac) или venv\Scripts\activate (Windows)
  3. pip install fastapi uvicorn — устанавливаем сам фреймворк и ASGI-сервер

Шаг 2: Создаём первый файл API

Создайте файл main.py и добавьте следующий код:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI(title="Мой первый API", version="1.0.0")

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

@app.get("/")
async def read_root():
    return {"message": "Добро пожаловать в мой API!"}

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

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

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

Шаг 3: Запускаем сервер

Вернитесь в терминал и выполните:

uvicorn main:app --reload

Всего одна команда — и ваш API уже работает на http://127.0.0.1:8000!

Шаг 4: Тестируем и изучаем документацию

Откройте браузер и перейдите по следующим адресам:

  • http://127.0.0.1:8000 — корневой эндпоинт
  • http://127.0.0.1:8000/docs — интерактивная документация Swagger UI
  • http://127.0.0.1:8000/redoc — альтернативная документация ReDoc

Проверяем POST-запрос

В разделе документации /items/ нажмите "Try it out", введите JSON:

{
  "name": "Ноутбук",
  "price": 999.99,
  "is_offer": true
}

И нажмите Execute. Вы увидите, как API автоматически валидировал данные и вернул корректный ответ!

Шаг 5: Расширяем функциональность

Добавим несколько полезных функций в наш API:

from typing import Optional
from datetime import datetime

# Добавляем эндпоинт с query-параметрами
@app.get("/users/")
async def read_users(skip: int = 0, limit: int = 10, active: Optional[bool] = None):
    return {"skip": skip, "limit": limit, "active": active}

# Эндпоинт с текущим временем
@app.get("/time")
async def get_current_time():
    return {"current_time": datetime.now().isoformat()}

# Обработка ошибок
from fastapi import HTTPException

@app.get("/items/error/{item_id}")
async def read_item_with_error(item_id: int):
    if item_id < 1:
        raise HTTPException(status_code=400, detail="Item ID должен быть положительным")
    return {"item_id": item_id}

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

За 5 минут мы создали базовый API, но это только начало. FastAPI предлагает множество продвинутых функций:

  • Зависимости (Dependencies) для повторного использования кода
  • Middleware для обработки запросов и ответов
  • Фоновые задачи (Background Tasks)
  • Валидация через регулярные выражения
  • Поддержка WebSockets
  • Интеграция с базами данных (SQLAlchemy, Tortoise ORM)
  • Аутентификация и авторизация (OAuth2, JWT)

Для production-окружения обязательно настройте CORS, добавьте логирование, мониторинг и используйте переменные окружения для конфигурации.

FAQ: Часто задаваемые вопросы

Нужно ли знать асинхронное программирование для работы с FastAPI?

Нет, не обязательно. FastAPI прекрасно работает и с синхронными функциями, но асинхронность позволяет лучше масштабироваться при высокой нагрузке.

Чем FastAPI лучше Flask или Django REST Framework?

FastAPI предлагает лучшую производительность, автоматическую документацию и современную систему типов. Он идеально подходит для микросервисов и современных веб-приложений.

Можно ли использовать FastAPI для больших проектов?

Да, многие крупные компании используют FastAPI в production. Фреймворк отлично масштабируется и поддерживает модульную архитектуру.

Как добавить аутентификацию в FastAPI?

FastAPI имеет встроенную поддержку OAuth2 с JWT токенами. Также можно использовать сторонние библиотеки или реализовать собственную систему аутентификации.

Поддерживает ли FastAPI GraphQL?

Да, через интеграцию с библиотеками типа Strawberry или Graphene. FastAPI отлично работает как с REST, так и с GraphQL API.

Теперь у вас есть полностью рабочий API с документацией, валидацией и тестовыми эндпоинтами. FastAPI действительно позволяет создавать профессиональные API за считанные минуты, что делает его идеальным выбором как для начинающих, так и для опытных разработчиков.