FastAPI — это современный, быстрый веб-фреймворк для создания API на Python, который завоевал огромную популярность благодаря своей простоте, скорости и автоматической генерации документации. Если вы думаете, что создание API — это сложно и долго, этот материал перевернёт ваше представление. Мы создадим работающий API с валидацией данных, документацией и тестовыми эндпоинтами буквально за пять минут.
Почему именно FastAPI?
Прежде чем перейти к практике, давайте разберёмся, почему этот фреймворк стал таким популярным среди разработчиков:
- Высокая производительность — сравнима с Node.js и Go благодаря использованию Starlette и Pydantic
- Автоматическая интерактивная документация (Swagger UI и ReDoc)
- Встроенная валидация данных через Pydantic
- Асинхронная поддержка «из коробки»
- Простота изучения и минималистичный синтаксис
FastAPI официально рекомендован Microsoft Azure, Uber, Netflix и другими технологическими гигантами для создания production-готовых API.
Шаг 1: Установка и настройка
Начнём с самого начала. Откройте терминал и выполните несколько команд:
Создание виртуального окружения
python -m venv venv— создаём виртуальное окружениеsource venv/bin/activate(Linux/Mac) илиvenv\Scripts\activate(Windows)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 UIhttp://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 за считанные минуты, что делает его идеальным выбором как для начинающих, так и для опытных разработчиков.